Kafka订购保证

5kgi1eie  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(316)

我正在经历 kafka 文档和
保证
在高层,Kafka提供了以下保证:
生产者发送到特定主题分区的消息将按发送顺序追加。也就是说,如果记录m1由与记录m2相同的生产者发送,并且首先发送m1,那么m1的偏移量将低于m2,并且在日志中出现得更早。使用者示例按记录在日志中的存储顺序查看记录。对于复制因子为n的主题,我们最多可以容忍n-1个服务器故障,而不会丢失提交到日志的任何记录。
我有几个问题。
总是保证 M1 偏移量将低于 M2 ? 如果…怎么办 M1 重试时间晚于 M2 ?
我也从各种文件中了解到,订购是不能保证的,消费者必须处理。

6ie5vjzr

6ie5vjzr1#

即使使用单个分区,也可能出现以下情况:
制作人发送 M1 制作人发送
M2 M1 第一次尝试时由于一些失败而未被确认 M2 已交付 M1 在随后的尝试中交付。
避免这种情况的一个简单方法是通过producer配置 max.in.flight.requests.per.connection=1 .
这当然会影响性能,因此应谨慎使用。

8cdiaqws

8cdiaqws2#

请注意,排序保证适用于分区级别。因此,如果主题中有多个分区,则需要为需要按顺序显示的消息设置相同的分区键。
例如,如果您想收集来自各种传感器的消息,并且传感器有它的id,那么如果您将此id用作消息密钥,则每个传感器的消息顺序将在使用者上得到保证(因为没有传感器会将消息写入超过1个分区)。
回答您的问题:
对, M1 将始终偏移低于 M2 . 偏移量是由代理设置的,因此消息到达代理的时间在这里是关键的。
仅在主题级别不能保证排序

相关问题