apache-kafka - Kafka Mirromaker2 生产者幂等性和重复项

标签 apache-kafka idempotent apache-kafka-mirrormaker

我已经在 2 个集群(CL1、CL2)上设置了mirrormaker2,并且镜像似乎工作正常,除了在以下场景中的测试主题中出现重复问题之外:

当两个集群都启动并运行时,我模拟一个事件,逐个停止 CL2 集群的代理。停止前两个代理不会产生任何问题。我的测试主题的所有消息都毫无问题地镜像到 CL2 集群的 CL1.topic 上。停止最后一个代理后,显然会停止 CL2 端的消息,因为所有代理都已关闭。在 CL1 主题的测试期间,始终有活跃的生产者提供消息。

问题在重新启动代理时开始出现。启动第一个代理后,我注意到一些消息(大约 5%)是重复的。我已经在 CL1.topic 上连接了一个客户端,我可以确认我的镜像主题中确实存在重复的消息。请建议我如何避免这些重复。 Broker 关闭期间幂等性可能无法正常工作?

在下面你可以找到我的MM2相关配置

clusters = CL1, CL2
CL1.bootstrap.servers = broker1CL1:9092, broker2CL1:9092, broker3CL1:9092
CL2.bootstrap.servers = broker1CL2:9092, broker2CL2:9092, broker3CL2:9092

PRIM->DSTR.enabled = true
DSTR->PRIM.enabled = true

CL1.producer.enable.idempotence = true
CL1.producer.acks=all
CL1.producer.max.in.flight.requests.per.connection=5
CL1.producer.retries=2147483647
CL1.consumer.isolation.level=read_committed
CL2.producer.enable.idempotence = true
CL2.producer.acks=all
CL2.producer.max.in.flight.requests.per.connection=5
CL2.producer.retries=2147483647
CL2.consumer.isolation.level=read_committed

最佳答案

此问题已在官方apache kafka mailing list上回复.

答案是:Kafka 的交付保证可以分为三组,包括“最多一次”、“至少一次”和“恰好一次”。默认情况下,当前的 MM 2.0 保证“至少”一次投递保证,这意味着在某些故障情况下会出现重复消息。为了了解更多,我建议阅读这篇link

关于apache-kafka - Kafka Mirromaker2 生产者幂等性和重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66549942/

相关文章:

azure - Kafka 连接器可以与事件中心代理一起使用吗?

http - 取消订阅链接是否需要幂等?

rest - PUT POST 是幂等的 (REST)

apache-kafka - Kafka Mirror Maker 2 偏移复制不工作

hadoop - Kafka Connect-在写入接收器之前修改记录

apache-spark - 如何获得 2 个不同的普罗米修斯指标之间的差异?

apache-kafka - 主题未配置主题级别兼容性

mongodb - 如何使 MongoDB Upsert 真正幂等?

apache-kafka - Kafka MirrorMaker2 主题 - 复制因子