如何保证Kafka分区的秩序

gc0ot86w  于 2021-06-07  发布在  Kafka
关注(0)|答案(4)|浏览(433)

好的,所以我知道你只能得到每个分区的订单保证。
只是随意的想法/问题。
假设分区策略是正确的,并且消息被正确地分组到正确的分区(甚至假设我们使用的是1个分区)
我假设生成应用程序必须将每条消息逐个发送给kafka,并确保每条消息在发送下一条消息之前都已确认,对吗?

x7rlezfr

x7rlezfr1#

是的,生产者应该是单线程的。如果使用多个生产者线程来生产同一个分区,消费者的排序保证仍然会丢失。因此,同一分区上的排序保证隐式地也意味着一个生产者线程。

3zwjbxry

3zwjbxry2#

是的,正确的是,生成应用程序发送消息的顺序决定了它们在分区中的存储顺序。
生产者发送到特定主题分区的消息将按发送顺序追加。也就是说,如果消息m1由与消息m2相同的生产者发送,并且m1首先被发送,那么m1将具有比m2更低的偏移量,并且在日志中出现得更早。http://kafka.apache.org/documentation.html#intro_guarantees
然而,如果你有多个信息在飞行中同时我不知道如何顺序是确定的。
你应该想想 acks 为你的制作人配置。如果在m1被发布后,一个新的leader接收到m2,那么一条消息可能会丢失。在这种情况下,您不会遇到无序的情况,而是缺少一条消息,因此它与原始问题稍微正交,但如果消息保证和顺序对应用程序至关重要,则需要考虑一些问题。http://kafka.apache.org/documentation.html#producerconfigs
总的来说,设计一个顺序上的细微差别并不是那么重要的系统可以真正简化事情。

yx2lnoni

yx2lnoni3#

同步发送消息一个接一个(绝对慢!),
或异步批量发送消息 max.in.flight.requests.per.connection = 1

li9yvcax

li9yvcax4#

Kafka有两种发送消息的策略:同步和异步。
对于同步类型,生产者直观地将消息逐个发送到目标分区,从而保证了消息的顺序。
对于异步类型,使用批处理方法发送消息,也就是说,如果m1在m2之前发送,那么m1首先在内存中累积,然后在m2中累积。因此,当生产者在单个请求中发送成批消息时,消息顺序将得到保证。

相关问题