【问题标题】:Handling the Duplicate and Order of the message in Kafka处理Kafka中消息的重复和顺序
【发布时间】:2020-02-10 01:59:59
【问题描述】:
试图了解以下配置在 Kafka 中处理消息顺序和重复消息之间的区别。我在任何地方都找不到任何详细的解释。
你能帮我理解一些用例吗?
enable.idempotence=true
即使使用请求管道,幂等生产者也可以处理重复消息并保持消息顺序 - 没有消息重复,因为代理忽略重复的序列号,并且消息顺序被保留,因为当出现故障时,生产者暂时限制为单个消息在飞行中,直到恢复测序。
max.in.flight.requests.per.connection=1 确保一次只能向代理发送一个请求。要在允许请求流水线的同时保留消息顺序,请设置配置
如果应用程序能够容忍一些消息丢失,则参数 retries=0
【问题讨论】:
标签:
apache-kafka
kafka-producer-api
【解决方案1】:
当您设置enable.idempotence=true 时,如果您不手动设置,这些配置会自动设置。
retries=Integer.MAX_VALUE
max.in.flight.requests=5(如果 Kafka 版本 >= 1.0 可以查看this 了解更多信息。)
acks=all
这是幂等生产者的理想配置。如果你设置retries=0,在网络故障的情况下你甚至不能发送消息给broker。
enable.idempotence:当设置为“true”时,生产者将确保每条消息的副本都写入流中。如果
'false',生产者因broker故障重试等,可能会写
流中重试消息的副本。请注意,启用
幂等性要求 max.in.flight.requests.per.connection 更小
大于或等于 5,重试次数大于 0 且 acks 必须为
'全部'。如果用户没有明确设置这些值,则适合
将选择值。如果设置了不兼容的值,则
会抛出 ConfigException。