1、Transaction Coordinator
1、Transaction Coordinator
Kafka事务
Transaction Coordinator 事务的交易协调员
PID —通过—>
Transaction Coordinator---获得--->
Transaction ID
为了实现跨分区跨会话的事务,需要引入一个全局唯一的Transaction ID,并将Producer获得的PID和Transaction ID绑定。这样当Producer重启后就可以通过正在进行的Transaction ID获得原来的PID。
Kafka引入了一个新的组件Transaction Coordinator。Producer就是通过和Transaction Coordinator交互获得Transaction ID对应的任务状态。Transaction Coordinator还负责将事务所有写入Kafka的一个内部Topic,这样即使整个服务重启,由于事务状态得到保存,进行中的事务状态可以得到恢复,从而继续进行。
2、consumer coordinator
consumer coordinator存在的唯一目的就是保存consumer提交的位移offset。
consumer需要定期向Kafka提交自己的位置信息,这一过程称为位移提交(offset commit)。consumer会在所有的broker中选择一个broker作为consumer group的coordinator,用于实现组成员管理、消费分配方案制定以及位移提交等。选择该coordinator的依据就是kafka的内置topic(_consumer_offsets)。该topic与普通topic一样,配置多个分区,每个分区有多个副本,它存在的唯一目的就是保存consumer提交的位移。
该
Transaction Coordinator
维护
Transaction Log
,该log存于一个内部的Topic内。由于Topic数据具有持久性,因此事务的状态也具有持久性。
Producer并不直接读写
Transaction Log
,它与
Transaction Coordinator
通信,然后由
Transaction Coordinator
将该事务的状态插入相应的
Transaction Log
。
Transaction Log
的设计与
Offset Log
用于保存Consumer的Offset类似。