1. Kafka消息事务
1.1 数据传输的事务定义
- 最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次不传输。
- 最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输。
- 精确的一次(Exactly once):不会漏传输也不会重复传输,每个消息都被一次传输而且仅仅被传输一次,这也是大家所期望的。
1.2 事务保证
- 内部重试问题:Procedure幂处理
- 多分区原子写入
1.3 避免僵尸实例
- 每个事务Producer分配一个transactional.id,在进程重新启动时能够识别相同的Producer实例。
- Kafka增加了一个与transactional.id相关的epoch,存储每个transactional.id内部元数据。
- 一旦epoch被触发,任何具有相同的transactional.id和更旧的epoch的Producer被视为僵尸,Kafka会 拒绝来自这几Procedure的后续事务性写入。