Gur*_* GV 5 apache-kafka kafka-producer-api
如果我使用Kafka Async生成器,假设缓冲区中有X个消息.当它们在客户端上实际处理时,如果代理或特定分区在某段时间内关闭,kafka客户端将重试,如果消息失败,它是否会将特定消息标记为失败并转到下一条消息(这可能导致乱序消息)?或者,为了保留订单,是否会使批处理中的剩余消息失败?
我接下来要保持订购,所以理想情况下希望kafka能够从失败的地方使批处理失败,所以我可以从失败点重试,我将如何实现?
就像卡夫卡文档中关于重试的内容所说
设置大于零的值将导致客户端重新发送发送失败并可能出现暂时性错误的任何记录。请注意,此重试与客户端在收到错误后重新发送记录没有什么不同。允许重试可能会更改记录的顺序,因为如果将两条记录发送到单个分区,并且第一个记录失败并重试,但第二个记录成功,则第二个记录可能会先出现。
因此,回答您的标题问题,卡夫卡在异步发送下没有顺序保证。
我正在根据彼得·戴维斯的问题更新答案。
我认为如果您想以批处理模式发送,确保其安全的唯一方法是设置 max.in.flight.requests.per.connection=1但如文档所述:
请注意,如果此设置设置为大于 1 并且存在发送失败的情况,则存在由于重试而导致消息重新排序的风险(即,如果启用了重试)。
| 归档时间: |
|
| 查看次数: |
1076 次 |
| 最近记录: |