编程语言爱好者Java 杂谈我爱编程

Learning Apache Kafka 2nd Editio

2018-04-10  本文已影响12人  GunnerAha

Chap 1 Kafka简介

1.Apache Kafka是一款开源的,分布式的,基于分区、日志提交和订阅推送的消息系统。设计用于:

Chap 2 搭建Kafka集群

1.Kafka集群支持

2.Kafka组成

3.一些操作说明

Chap 3 Kafka设计

1.Kafka设计准则

2.日志压缩:相同key的消息,只保存最新的value,删除key相同的旧数据。Kafka支持的保存策略有:基于时间、基于文件大小和基于日志压缩。基于日志压缩的保存策略:

3.与其它消息系统不同,消费消息的元数据由consumer发起(保存在ZK中)而不是server。这可能导致:丢失消息和重复消费。所有的broker地位相同,没有master,broker的元数据保存在ZK。生产者发送消息支持同步和异步模式。

4.支持消息压缩,可以将一批消息压缩发送给broker,可以减少网络消耗。0.7版本之前,这批压缩消息会被同一个consumer消费,0.8之后的版本可以根据offset拆分访问。支持的压缩协议:GZIP和Snappy。

5.消息分区策略由生产者决定,broker按照消息到达的顺序存储消息,有几个分区由broker决定。

6.通过复制策略提供容灾,分为leader和fffollower,leader保存follower的列表:ISR(in-sync replicas)。支持的复制策略有:

7.当有follpwer失效时,leader将从ISR列表中将其删除。当follower又回来时,首先重置日志到上次的checkpoint,然后从leader同步数据,同步完成后,leader将其写入到ISR列表中。

当leader出现错误(写入分区日志或者发送回执到生产者之前),消息会重新发送到新leader。优先选择早注册的follower成为leader,然后将其offset设置为集群的offset。其他follower通过注册在ZK的监听器察觉此动作,重置日志到上次checkpoint并向新leader开始同步数据。新leader在等待超时或者所有follower完成同步后将ISR列表写入ZK并承接读写工作。

Chap 4消费者

1.生产者连接任意节点,获取关于当前分区leader的元数据信息,然后将消息写入当前分区。写入时可以通过key并进行hash操作确定写入哪个分区。为了提高效率,支持按照时间或者条数进行批量异步写入,并提供回调函数处理写入错误,用以防止数据丢失。
2.通过实现Partitioner接口来实现分区计算。

Chap 5消费者

1.消费者连接任意节点获取leader分区信息。每个分区只能由订阅该topic的一个消费者消费,消费后会更新offset,然后根据offset由另一个消费者消费其他分区。

2.消费者API分为顶层API和底层API:

PS:六七章待读。

上一篇 下一篇

猜你喜欢

热点阅读