Nag*_*Nag 4 apache-kafka kafka-producer-api
我正在浏览kafka文档并遇到了
保证
在高层次上,Kafka 提供了以下保证:
生产者发送到特定主题分区的消息将按发送顺序附加。也就是说,如果记录 M1 与记录 M2 由同一生产者发送,并且 M1 先发送,则 M1 的偏移量将低于 M2,并在日志中出现更早。消费者实例按照记录在日志中的存储顺序查看记录。对于复制因子为 N 的主题,我们最多可以容忍 N-1 个服务器故障,而不会丢失提交到日志的任何记录。
我有几个问题。
M1将具有比 更低的偏移量M2?如果M1重试晚于M2?请注意,订购保证适用于分区级别。因此,如果主题中有多个分区,则需要为需要按顺序显示的消息设置相同的分区键。
例如,如果您想从各种传感器收集消息,并且传感器有它的 id,那么如果您使用此 ID 作为消息键,则消费者将保证来自每个传感器的消息的顺序(因为没有传感器会将消息写入超过 1 个)分割)。
回答您的问题:
M1偏移量总是低于M2。偏移量由代理设置,因此消息到达代理的时间是这里的关键。即使只有一个分区,一种可能的情况是:
M1M2M1 由于某些失败,在第一次尝试时没有被确认M2 已交付M1 在随后的尝试中交付。避免这种情况的一种简单方法是通过生产者配置max.in.flight.requests.per.connection=1。
这当然会影响性能,因此应谨慎使用。
| 归档时间: |
|
| 查看次数: |
3415 次 |
| 最近记录: |