繁体   English   中英

是否以相同的生成消息顺序接收到 kafka ack

[英]Are kafka acks received in the same order of produced messages

我正在研究从 IBM MQ 收集数据并将其处理为 kafka 主题的过程。 为了确保不丢失任何消息,我需要在确保我的消息正在被 kafka 代理发送和接收之后才提交我的 JMS 消息。 我不想使用同步 kafka 生产者(等待 future.get()),因为它可能会对性能产生影响,而是我想在我提供我的 kafka 生产者的回调中提交我的 JMS 消息。 为了使其正常工作,我需要保证 ack 将按照我生成的消息的相同顺序接收(第一个 ack 对应于发送的第一条消息..)。

我的假设正确吗?

这些是您想要用于订购的 Kafka 生产者消息的生产者配置

enable.idempotence=true
acks=all
max.in.flight.requests.per.connection=5
retries=2147483647

最后两个是默认值,因此您不需要明确设置它们。

详细信息 - https://developer.confluent.io/tutorials/message-ordering/kafka.html

但是,除非您使用同步生产者,否则无法保证 Kafka 生产者回调的顺序

从 IBM MQ 收集数据并将其处理到 kafka 主题

您可以为此使用 Kafka Connect,而不是编写自己的生产者

这里我们需要少谈消息处理保证。

如果我们追求一次性处理语义和消息传递顺序,那么消费者必须配置isolation.level="read_committed",生产者必须配置retries=Integer.MAX_VALUE、enable.idempotence=true 和max。 in.flight.requests.per.connection=1 默认情况下。

此外,设置 max.in.flight.requests.per.connection=1 将保证消息将按照发送的顺序写入代理,即使发生重试也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM