Kafka组件说明

Kafka组件说明

Broker:消息中间件处理节点,⼀个Kafka节点就是⼀个broker,⼀个或者 多个Broker可以组成⼀个Kafka集群,一个Kafka集群通常包括多个Broker

Topic:是一个逻辑的概念,Kafka根据topic对消息进⾏归类,发布到Kafka集群的每条消息都需要指定⼀个topic,一个或多个Partition组成一个Topic

Producer:消息⽣产者,向Broker发送消息的客户端

Consumer:消息消费者,从Broker读取消息的客户端

ConsumerGroup:消费者组,同一个group的consumer可以并行消费同一个topic的消息,但是每条消息和partition只能被 consumer group 中一个消费者消费,但可被多个 consumer group 消费

Partition:物理上的概念,⼀个topic可以包含多个partition,每个partition内部消息是有序的,partition中的每个消息都有一个连续递增的序列号叫做offset,偏移量offset在每个分区中是唯一的,简单来说,offset提供了定位数据读取的位置,所以kafka的存储文件都是按照offset.kafka来命名。Partition以文件夹形式存在。

  • kafka0.9 版本之前offset保存在zookeeper上
  • kafka0.9 版本之后offset保存在kafka集群上
  • 无论是存储在哪都是为了记录消费位置,以便集群宕掉后重启能继续原来的位置接着消费,zk虽然可以用来存储数据,但是它并不是存储数据的首选方案,如果存储在zk中,消费者会频繁地从zk中拉取消息,背离了zk的设计初衷

从下图已经可以看出来。无分区时,一个topic只有一个消费者在消费这个消息队列。采用分区后,如果有两个分区,最多两个消费者同时消费,消费的速度肯定会更快。如果觉得不够快,可以加到四个分区,让四个消费者并行消费。分区的设计大大的提升了kafka的吞吐量!!!

再来看看下面这张图,可以从中知道几个知识点

1、一个partition只能被同组的一个consumer消费(图中只会有一个箭头指向一个partition)

2、同一个组里的一个consumer可以消费多个partition(图中第一个consumer消费Partition 0和3)

3、消费效率最高的情况是partition和consumer数量相同。这样确保每个consumer专职负责一个partition

4、consumer数量不能大于partition数量。由于第一点的限制,当consumer多于partition时,就会有consumer闲置

5、consumer group可以认为是一个订阅者的集群,其中的每个consumer负责自己所消费的分区

replica副本:partition 的副本,保障 partition 的高可用,topic下会划分多个partition,每个partition都有自己的replica,其中只有一个是leader replica,其余的是follower replica。Topic、partition、replica的关系如下图

注:副本数不可大于broker节点数量

  • 副本可以在设置主题的时候可以通过replication-factor参数来设置,也可以在broker级别中设置defalut.replication-factor来指定,一般我们都设置为3;

  • 三个副本中有一个副本是leader,两个副本是follower,leader负责消息的读写,follower负责定期从leader中复制最新的消息,保证follower和leader的消息一致性,当leader宕机后,会从follower中选举出新的leader负责读写消息,通过分区副本的架构,虽然引入了数据冗余,但是保证了kafka的高可靠。

Zookeeper:Kafka需要和zookeeper联合部署,Zookeeper保证了Kafka系统可用性。同时借助zk,kafka能够将生产者,消费者和broker在内的所有组件在无状态的条件下建立起生产者和消费者的订阅关系,实现生产者的负载均衡。

  • kafka的每个broker(相当于一个节点,相当于一个机器)在启动时,都会在zk中注册,告诉zk其brokerid,在整个的集群中,broker.id/brokers/ids,当节点失效时,zk就会删除该节点,就很方便的监控整个集群broker的变化,及时调整负载均衡
  • 在kafka中可以定义很多个topic,每个topic又被分为很多个分区。一般情况下,每个分区独立在存在一个broker上,所有的这些topic和broker的对应关系都有zk进行维护
  • 注册新的消费者,当有新的消费者注册到zk中,zk会创建专用的节点来保存相关信息,路径ls /consumers/{group_id}/  [ids,owners,offset]

    ids:记录该消费分组有几个正在消费的消费者

    Owmners:记录该消费分组消费的topic信息

    Offset:记录topic每个分区中的每个offset

  • 监听消费者分组中消费者的变化,监听/consumers/{group_id}/ids的子节点的变化,一旦发现消费者新增或者减少及时调整消费者的负载均衡
posted @ 2022-05-24 10:43  RFAA  阅读(158)  评论(0编辑  收藏  举报