首页 > 解决方案 > 卡夫卡生产者保证

问题描述

我正在使用 Kafka Producer,我的应用程序将所有具有相同密钥的单个 ProducerRecords 发送到单个分区中,然后将这些 ProducerRecords 进行批处理(使用 batch.size 和 linger.ms 参数),然后再发送给代理。我有 enable.idempotence=true 和 acks=all。

如果批处理中的一条记录写入失败,例如主机崩溃或网络故障或磁盘故障或记录未能通过最小副本确认,Kafka是否保证所有后续记录也不会被写?或者是否有可能丢失批次中间的记录?

标签: apache-kafkakafka-producer-api

解决方案


如果批处理中的一条记录写入失败,例如主机崩溃或网络故障或磁盘故障或记录未通过最小副本确认,Kafka是否保证所有后续记录也不会被写?

是的,如果批次中的任何消息失败,则同一批次中的所有消息都会失败。因此,批处理中的任何消息都不会写入代理的磁盘。

或者是否有可能丢失批次中间的记录?

不,批处理的所有消息或没有消息写入代理。

这是通过生产者客户端线程和本地缓冲区之间的分离来实现的,该缓冲区在将数据物理发送到代理之前对数据进行排队和批处理。


推荐阅读