[英]Kafka Producer (with multiple instance) writing to same topic
我有一个用例,其中消息来自某个渠道,我们希望将其推送到一个Kafka主题(多个分区)中。 在我们的情况下,消息顺序很重要,因此我们必须按接收消息的顺序将消息推送到主题,如果我们只有一个producer
和单个分区,这看起来非常简单。 在我们的案例中,为了实现负载平衡和可伸缩性,我们希望为同一producer
运行多个实例,但是问题是如何维护消息的顺序 。
任何想法或解决方案将大有帮助。
即使我认为只有一个分区,也可以将其复制到多个代理以提高可用性和容错能力吗?
我们必须按收到消息的顺序将消息推送到主题,如果我们只有一个生产者和单个分区,这看起来非常简单
您可以在一个生产者的主题中具有多个分区,并且如果您为消息提供密钥,则仍然可以保持顺序。 由单个生产者产生的具有相同密钥的所有消息总是井井有条。
当您说多个生产者时 ,我假设您正在运行应用程序的多个实例,并且没有在同一个JVM实例中创建多个生产者。
既然您说过channel ,我想它是一个网络通道,例如Datagram通道。 在这种情况下,我想您正在某个端口上侦听并将接收到的数据发送到Kafka。
我看不到在同一实例中有多个生产者针对同一个主题进行生产的意义,因此最好由一个生产者发送所有消息,并且为了提高性能,您可以调整生产者属性,例如
batch.size
,linger.ms
等等
为了实现容错能力,请让另一个实例在HA模式(故障转移模式)下运行,以便该实例死亡后,另一个实例将自动启动。
如果是网络通道,则可以运行多个实例,并在StandardSocketOptions中使用选项
SO_REUSEADDR
打开套接字,这样,在任何时候您只有一个生产者将处于活动状态,并且一旦活动的生产者死亡,新的生产者将变为活动状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.