引言
最近接触的项目中使用kafka做日志收集和消息队列,所以学习了一下kafka。因为kafka是一个分布式的项目,所以要依赖zookeeper做集群的调度管理,建议在学习了zookeeper的基础上学习kafka,这样才能事半功倍。
学习资料
kafka官方中文文档:
https://kafka.apachecn.org/documentation.html
官方中文文档无疑是最全面、最权威的学习资料,但是比较晦涩难懂,不建议使用它来入门。可以在有一定基础后再来参考。
尚硅谷kafka教程:
https://www.bilibili.com/video/BV1a4411B7V9
这个教程来入门还是蛮不错的,配套的文档也可以在视频下方评论区找到,但是比较偏向kafka在大数据领域中的使用。
大佬的博客:
https://blog.csdn.net/tangdong3415/article/details/53432166/
宝藏教程,供懒得看视频的程序猿使用。
重要概念
producers、consumer、Broker、Topic这些基础且简单的概念参考教程,不再赘述。
发布/订阅模式
消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消息。一对多,且消费者消费数据之后不会清除消息,类似于我们的微信公众号。
Consumer Group (CG)
消费者组,由多个 consumer 组成。 一个分区不能被组内两个消费者消费,也就是说分区与消费者是一对一的关系;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
Partition(分区)和Replica(副本)
kafka的分区和副本是重要而且较为复杂的概念,理解这两个概念的机制花费了比较大的功夫。副本还涉及到一个选举机制,leader和follower的概念与zookeeper较为相似但又有所不同。这部分参考文章:
https://www.cnblogs.com/listenfwind/p/12465409.html
https://www.cnblogs.com/qxynotebook/p/11235275.html
下边的内篇文章比较好,图文并茂。内外要注意一个分区副本的数目不能超过borker的数目,因为一个borker上存两个副本是没有意义的。