文章目录
- Kafka高效读写数据及事务
- 1. Kafka高效读写数据
- 1.1 顺序写磁盘
- 1.2 零复制技术
- 2. Zookeeper 在Kafka中的作用
- 3. Kafka事务
- 3.1 Producer事务
- 3.2 Consumer事务
- ☆
Kafka高效读写数据及事务
1. Kafka高效读写数据
1.1 顺序写磁盘
Kafka 的 producer 生产数据,要写入到 log 文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁盘,顺序写能到 600M/s,而随机写只有 100K/s。这与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。
1.2 零复制技术
2. Zookeeper 在Kafka中的作用
Kafka 集群中有一个 broker 会被选举为 Controller,负责管理集群 broker 的上下线,所有 topic 的分区副本分配和 leader 选举等工作。Controller 的管理工作都是依赖于 Zookeeper 的。以下为 partition 的 leader 选举过程:
3. Kafka事务
Kafka 从 0.11 版本开始引入了事务支持
。事务可以保证 Kafka 在 Exactly Once 语义的基础上,生产和消费可以跨分区和会话,要么全部成功,要么全部失败。
3.1 Producer事务
- 为了实现跨分区跨会话的事务,需要引入一个
全局唯一的 Transaction ID
,并将 Producer获得的PID和Transaction ID绑定。这样当Producer重启后就可以通过正在进行的TransactionID 获得原来的 PID。- 为了管理 Transaction,Kafka 引入了一个新的
组件 Transaction Coordinator
。Producer 就是通过和 Transaction Coordinator 交互获得 Transaction ID 对应的任务状态。Transaction Coordinator 还负责将事务所有写入 Kafka 的一个内部 Topic,这样即使整个服务重启,由于事务状态得到保存,进行中的事务状态可以得到恢复,从而继续进行。
3.2 Consumer事务
- 上述事务机制主要是从 Producer 方面考虑,对于 Consumer 而言,事务的保证就会相对较弱,尤其时无法保证 Commit 的信息被精确消费。这是由于 Consumer 可以通过 offset 访问任意信息,而且不同的 Segment File 生命周期不同,同一事务的消息可能会出现重启后被删除的情况。
☆