参考文章链接:https://zhuanlan.zhihu.com/p/68052232
本文主要总结kafka的各项特点,用于辅助对该消息中间件的理解。
图中各项元素的含义:
Producer生产者,可以有多个生产者,作为消息的来源。
Broker实例,即kafka的实例,每一个Broker可以看作一个服务器,或者一个虚拟机,或者伪集群中的一个。
Topic主题,为消息的分类,可以有多个消息主题。
Partition分区,作用是负载,提高kafka的吞吐量,同一个Topic在不同的分区的数据是不一样的。
Consumer消费者,消息的消费方,是消息的出口
Zookeeper,kafkaj集群需要依靠zookeeper保存集群的元消息,保证系统的可用性。
kafka的设计核心是为了解决M个生产者N个消费者,则需要拉M*N条线,并且接口和协议均不相同,因此使用消息中间件来解耦消费者和生产者
特点:
- 生产者生产的数据首先写入leader,follower再进行同步,生产者不会主动写入follower
- kafka将数据写入磁盘,独立开辟一片区域,顺序存储,用于弥补IO时间消耗
- Partition在服务器上的实例就是一个一个的文件夹,内容为i.ndex、.log和.timeindex .log为存储message的地方,其余两个为索引文件
- Message结构为 offset、消息大小和消息体,其中offset可以确定message在partition中的位置
- 存储策略默认为7天,过期会被删除
- 把每个partition比作一碗饭,每个consumer比作一个人。可以出现一个人吃同时多碗饭的情况,不能出现多个人吃一碗饭的情况,如果人比多饭碗,那就得有人饿着
- kafka的优势,解耦、异步、削峰
- 解耦是指消费者和生产者脱离直接关联,由于两者对数据的需求、处理速度可能不同,因此需要kafka作为中间件来解耦,类比快递中的自提柜
- 异步是指生产者不用等待消费者的动作,只需要将生产的数据放入kafka,无需管消费者的消费时间
- 削峰,生产者多的时候,数据量较大 topic较多,而消费者只需从中间件提取所需,而不需要管生产者是否同时生产,同样对于生产者,无需关系消费者是否有时间消费数据,只需将生产的数据放入kafka即可