如何保证Kafka分区的订单

use*_*024 5 apache-kafka kafka-producer-api

好的,我明白你每个分区只能获得订单保证.

只是随意的想法/问题.

假设分区策略正确并且消息正确分组到正确的分区(或者甚至说我们使用的是1分区)

我认为生产应用程序必须将每条消息1发送1到kafka,并确保在发送下一条消息之前已经确认每条消息都已被确认?

phe*_*ris 8

是的,你是正确的,生产应用程序发送消息的顺序决定了它们存储在分区中的顺序.

生产者发送到特定主题分区的消息将按其发送顺序附加.也就是说,如果消息M1由与消息M2相同的生产者发送,并且首先发送M1,则M1将具有比M2更低的偏移并且在日志中更早出现. http://kafka.apache.org/documentation.html#intro_guarantees

但是,如果您同时在飞行中有多条消息,我不确定如何确定订单.

您可能还想考虑acks生产者的配置.如果领导者在M1发布并且新领导者收到M2之后出现故障,则可能会丢失消息.在这种情况下,您将不会出现无序状态,但缺少消息,因此它与您的原始问题略有正交,但如果消息保证和订单对您的应用程序至关重要,则需要考虑. http://kafka.apache.org/documentation.html#producerconfigs

总的来说,设计一个系统,其中有序的微小差异并不重要,这可以真正简化事情.


Sha*_*Guo 5

同步发送消息一一\xef\xbc\x88绝对慢!\xef\xbc\x89,
\也不是异步批量发送消息max.in.flight.requests.per.connection = 1

\n