kafka核心概念、组件角色介绍
1.kafka是什么?
Kafka是一个分布式消息中间件,支持分区的、多副本的、多订阅者的、基于zookeeper协调的分布式消息系统。
通俗来说: kafka就是一个存储系统,存储的数据形式为“消息”; 它的主要作用类似于蓄水池,起到一个缓冲作用。
2.Kafka中有哪些重要的组件、角色?
- producer: 消息生产者,就是向kafka broker 发消息的客户端。
- consumer : 消息消费者,从kafka broker 取消息的客户端。
- consumer group: 单个或多个consumer可以组成一个consumer group,这是 kafka 用来实现消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段。
- Topic :Topic是一个存储消息的逻辑概念,可以认为是一个消息集合,具体的存储还是基于 Partition 来的。
- partition:topic中数据的具体管理单元;(你可以理解为hbase中表的“region”概念)
- broker:
一台 kafka 服务器就是一个 broker。
一个kafka集群由多个 broker 组成。
一个 broker 可以容纳多个 topic的多个partition。- partition Replica:
partition的副本,保障partition的高可用(replica副本数目不能大于kafka broker节点的数目,否则报错。)
每个partition的所有副本中,必包括一个leader副本,其他的就是follower副本- Leader:partition replica中的一个角色,producer和consumer只跟leader交互(负责读写)。
- Follower:partition replica中的一个角色,从leader中拉取复制数据(只负责备份)。
如果leader所在节点宕机,follower中会选举出新的leader;- 偏移量Offset:
每一条数据都有一个offset,是数据在该partition中的唯一标识(其实就是消息的索引号)。
各个consumer会保存其消费到的offset位置,这样下次可以从该offset位置开始继续消费;
consumer的消费offset保存在一个专门的topic(__consumer_offsets)中;(注:0.10.x版本以前是保存在zk中)- 消息Message:简单来说,kafka中的每个massage由一对key-value构成
- Zookeeper在Kafka中的作用
Kafka集群中有一个broker会被选举为Controller,负责管理集群broker的上下线,所有topic的分区副本分配和leader选举等工作。
Controller的管理工作都是依赖于Zookeeper的。
3. 为什么使用消息队列?
关键词:异步 解耦 削峰
解耦:kafka利用消息队列解耦数据的处理过程、当有新的需求时只需增加处理过程即可,不需要改变原系统的代码
异步:通过开线程的方式实现同步转异步,提高主业务逻辑的响度速度
削峰:利用消息队列将请求进行缓存,慢慢处理请求,减轻数据库的访问压力。
4. kafka中的topic拥有多少个分区,有多少副本,是如何决定的?
- topic默认有1个分区,创建时可以通过–partitions参数自定义topic的数量
- topic的分区的副本数根据业务的需求可以自定义,通过–replication-factor参数设定,其数量不能大于kafka broker节点的数目(没有默认的副本数)