apache-kafka - 卡夫卡生产者保证
问题描述
我正在使用 Kafka Producer,我的应用程序将所有具有相同密钥的单个 ProducerRecords 发送到单个分区中,然后将这些 ProducerRecords 进行批处理(使用 batch.size 和 linger.ms 参数),然后再发送给代理。我有 enable.idempotence=true 和 acks=all。
如果批处理中的一条记录写入失败,例如主机崩溃或网络故障或磁盘故障或记录未能通过最小副本确认,Kafka是否保证所有后续记录也不会被写?或者是否有可能丢失批次中间的记录?
解决方案
如果批处理中的一条记录写入失败,例如主机崩溃或网络故障或磁盘故障或记录未通过最小副本确认,Kafka是否保证所有后续记录也不会被写?
是的,如果批次中的任何消息失败,则同一批次中的所有消息都会失败。因此,批处理中的任何消息都不会写入代理的磁盘。
或者是否有可能丢失批次中间的记录?
不,批处理的所有消息或没有消息写入代理。
这是通过生产者客户端线程和本地缓冲区之间的分离来实现的,该缓冲区在将数据物理发送到代理之前对数据进行排队和批处理。
推荐阅读
- prolog - How to describe commutative rules in prolog?
- r - 在数据框中使用 R mutate 在表中生成自引用键
- php - Laravel: How to dynamically create and name views?
- powerbi - PowerBI 与具有 ODBC 连接的 Access DB 存在问题
- c - Gcc:与 x86 32 位的 mstructure-size-option 类似的选项
- google-sheets - 如何从多个工作表创建 Google 电子表格数据透视表?
- vba - Copy range from sheet, and loop through files in a directory and do the following, Add rows to specific sheet, and paste values into sheet
- android - Translating Accelerometer Vectors from Device to Earth Coordinates
- html - High resolution canvas page scale to window height
- c++ - 代码是否交换数组的两个数字?