Kafka 消息交付可靠性保障:
Kafka 实现精确一次的两种机制:
幂等 : 某些操作执行多次,但每次结果都是一样的
Kafka-0.11.0.0 引入幂等性 Producer
Producer 幂等性启动:
props.put("enable.idempotence", ture);
// 或
props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true);
Kafka 自动实现消息的重复去重:
幂等性 Producer 的作用范围
数据库的事务的 ACID : 原子性(Atomicity) ,一致性 (Consistency) , 隔离性 (Isolation) , 持久性 (Durability)
隔离性 :并发执行的事务彼此相互隔离,互不影响
已提交读 (read committed) :
Kafka-0.11 支持事务 :
事务型 Producer 的作用范围:
设置事务型 Producer :
enable.idempotence = truetransctional.id调整 Producer 代码 :
producer.initTransactions();try {producer.beginTransaction();//保证 Record1 和 Record2 为一个事务统一提交 Kafkaproducer.send(record1);producer.send(record2);producer.commitTransaction();
} catch (KafkaException e) {producer.abortTransaction();
}
写入失败消息,也会写入到日志中 :
isolation.levelisolation.level 取值:
read_uncommitted (默认值) : Consumer 能读到 Kafka 写入的任何消息。用事务型 Producer,Consumer 不能用这个read_committed : Consumer 只会读取事务型 Producer 成功提交事务写入的消息