响应式网站建设特征,公共资源交易网站建设方案,攀枝花网站seo,织梦cms默认密码Kafka生产者幂等性/事务幂等性事务Kafka 消息交付可靠性保障#xff1a;
Kafka 默认是#xff1a;至少一次最多一次 (at most once) : 消息可能会丢失#xff0c;但绝不会被重复发送至少一次 (at least once) : 消息不会丢失#xff0c;但有可能被重复发送精确一次 (exact…
Kafka生产者幂等性/事务幂等性事务Kafka 消息交付可靠性保障
Kafka 默认是至少一次最多一次 (at most once) : 消息可能会丢失但绝不会被重复发送至少一次 (at least once) : 消息不会丢失但有可能被重复发送精确一次 (exactly once) : 消息不会丢失也不会被重复发送
Kafka 实现精确一次的两种机制
幂等性 (Idempotence) : 保证单分区、单会话上的消息幂等性事务 (Transaction) : 保证跨分区、跨会话间的幂等性, 性能更差
幂等性
幂等 : 某些操作执行多次但每次结果都是一样的
幂等性好处安全地重试任何幂等性操作不会破坏系统状态
Kafka-0.11.0.0 引入幂等性 Producer
Producer 幂等性启动
props.put(enable.idempotence, ture);
// 或
props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG true);Kafka 自动实现消息的重复去重
用空间去换时间的优化思路当 Producer 发送了具有相同字段值的消息后Broker 得知这些消息已经重复就在后台丢弃掉
幂等性 Producer 的作用范围
保证单分区的幂等性 一个幂等性 Producer 只能保证某个主题的一个分区上不出现重复消息无法实现多个分区的幂等性保证单会话的幂等性当重启 Producer 后该幂等性就丧失
事务
数据库的事务的 ACID : 原子性Atomicity) ,一致性 (Consistency) , 隔离性 (Isolation) , 持久性 (Durability)
隔离性 并发执行的事务彼此相互隔离互不影响
已提交读 (read committed) :
无脏读 : 当读取数据库时只能看到已提交的数据无脏写 : 当写入数据库时只能覆盖掉已提交的数据
Kafka-0.11 支持事务 :
read committed 隔离级别 保证多条消息原子性地写入到目标分区同时保证 Consumer 只能看到事务成功提交的消息
事务型 Producer 的作用范围:
跨分区的幂等性保证消息原子性地写入到多个分区中。要么全部写入成功要么全部失败跨会话的幂等性Producer 重启后依然能精确一次处理
设置事务型 Producer
开启 enable.idempotence true设置 Producer 端 transctional.id
调整 Producer 代码 :
initTransaction : 事务的初始化beginTransaction : 事务开始commitTransaction : 事务提交abortTransaction : 事务终止
producer.initTransactions();try {producer.beginTransaction();//保证 Record1 和 Record2 为一个事务统一提交 Kafkaproducer.send(record1);producer.send(record2);producer.commitTransaction();
} catch (KafkaException e) {producer.abortTransaction();
}写入失败消息也会写入到日志中
Consumer 读取事务型 Producer 消息时要设置 isolation.level
isolation.level 取值
read_uncommitted (默认值) : Consumer 能读到 Kafka 写入的任何消息。用事务型 ProducerConsumer 不能用这个read_committed : Consumer 只会读取事务型 Producer 成功提交事务写入的消息