Apache kafka 卡夫卡制作人(具有多个实例)编写同一主题

Apache kafka 卡夫卡制作人(具有多个实例)编写同一主题,apache-kafka,kafka-producer-api,Apache Kafka,Kafka Producer Api,我有一个用例,其中消息来自一个通道,我们希望将其推入卡夫卡主题(多个分区)。在我们的例子中,消息顺序很重要,因此我们必须按照消息接收的顺序将消息推送到主题,如果我们只有一个生产者和单个分区,那么这个顺序看起来非常直接。在我们的例子中,为了负载平衡和可伸缩性,我们希望为同一个生产者运行多个实例,但问题是如何维护消息的顺序 任何想法或解决方案都会大有裨益 即使我认为只有一个分区,它是否可以复制到多个代理以获得可用性和容错性 我们必须按接收顺序将消息推送到主题 如果我们只有一个制作人和 单个分区 如果

我有一个用例,其中消息来自一个通道,我们希望将其推入卡夫卡主题(多个分区)。在我们的例子中,消息顺序很重要,因此我们必须按照消息接收的顺序将消息推送到主题,如果我们只有一个
生产者和单个分区,那么这个顺序看起来非常直接。在我们的例子中,为了负载平衡和可伸缩性,我们希望为同一个
生产者运行多个实例,但问题是如何维护消息的顺序

任何想法或解决方案都会大有裨益

即使我认为只有一个分区,它是否可以复制到多个代理以获得可用性和容错性

我们必须按接收顺序将消息推送到主题 如果我们只有一个制作人和 单个分区

如果为消息提供密钥,则主题中可以有多个分区和一个生产者,并且仍然保持顺序。由一个生产者生成的具有相同密钥的所有消息总是有序的


当您说多个生产者时,我假设您正在运行应用程序的多个实例,并且您没有在同一JVM实例中创建多个生产者

既然你说的是信道,我假设它是一个网络信道,比如数据报信道。在这种情况下,我假设您正在监听某个端口,并将接收到的数据发送到Kafka

我不认为在同一个实例中有多个生产者有什么意义 制作同一主题,因此最好有一个制作人 发送所有消息,为了提高性能,您可以调整制作人 属性,如
batch.size
linger.ms

要实现容错,请让另一个实例在HA模式(故障转移模式)下运行,这样,如果该实例死亡,另一个实例将自动恢复

如果是网络通道,则可以运行多个实例并打开 带有选项
SO\u REUSEADDR
的插座位于 这样你就只有一个制作人了 在任何时候都处于活动状态,新制作人将在 活跃的人死了


是的,您可以使用单个分区复制主题。要维护消息的顺序(如果是多个分区),您必须找到可以用于分组消息的内容。