目录

kafka概念:【重点】【重点】【重点】【面试问过】

Kafka Brokers(代理,代理节点,经纪人):

topic:

partition(分区):

offset:

Producer:

Consumer:

Consumer Group:

Zookeeper:

什么是消费者组?Kafka 中 Consumer Group 是什么概念?【重点】【面试问过】

什么是Partition (分区):

参考文献

kafka概念:【重点】【重点】【重点】【面试问过】

Kafka是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由LinkedIn公司开发,使用Scala语言编写,目前是Apache的开源项目;

Kafka Brokers(代理,代理节点,经纪人)

在管理主题中的消息存储时,我们使用 Kafka Brokers,Kafka服务器,负责消息存储和转发可以看作是一个独立的 Kafka 实例。多个 Kafka Broker 组成一个 Kafka Cluster

topic

Producer 将消息发送到特定的主题,Consumer 通过订阅特定的 Topic(主题) 来消费消息;

消息类别,Kafka按照topic来分类消息,Kafka主题是一堆或一组消息

Kafka 将生产者发布的消息发送到 Topic(主题) 中,需要这些消息的消费者可以订阅这些 Topic(主题),如下图所示:

partition(分区)

  • Partition 属于 Topic 的一部分。一个 Topic 可以有多个 Partition ,并且同一 Topic 下的 Partition 可以分布在不同的 Broker 上,这也就表明一个 Topic 可以横跨多个 Broker
  • Partition 属于 Topic 的一部分
  • 一个 Topic 可以有多个 Partition ,并且同一 Topic 下的 Partition 可以分布在不同的 Broker 上,这也就表明一个 Topic 可以横跨多个 Broker
  • 一个分区只能被同一个 Consumer Group 中的一个 Consumer 消费,分区内消费有序同一Consumer Group中的多个Consumer实例,不同时消费同一个partition,等效于队列模式
  • 再来看Kafka 的 Partition,Kafka 的消费模式和发送模式都是以 Partition 为分界。也就是说对于一个 Topic 的并发量限制在于有多少个 Partition, 就能支撑多少的并发
  • 一个 Topic 可以横跨多个 Broker
  • 一个分区只对应一个Broker,一个Broker可以管理多个分区
  • Kafka可以将主题划分为多个分区(Partition),会根据分区规则选择把消息存储到哪个分区中
  • topic是逻辑的概念,partition是物理的概念
  • producer只需要关心消息发往哪个topic,而consumer只关心自己订阅哪个topic,并不关心每条消息存于整个集群的哪个broker
  • 对于partition,顺序读写磁盘数据,以时间复杂度O(1)方式提供消息持久化能力

offset

消息在日志中的位置,可以理解是消息在partition上的偏移量,也是代表该消息的唯一序号

Producer

消息生产者,在Kafka,生产者发布通信以及向Kafka主题发布消息;

Consumer

消息消费者,Kafka消费者订阅了一个主题,并且还从主题中读取和处理消息;

Consumer Group

消费者分组,每个Consumer必须属于一个group

Zookeeper

保存着集群broker、topic、partition等meta数据;另外,还负责broker故障发现,partition leader选举,负载均衡等功能

什么是消费者组?Kafka 中 Consumer Group 是什么概念?【重点】【面试问过】

  • 消费者组是Kafka独有的概念,如果面试官问这个,就说明他对此是有一定了解的。
  • 官网上的介绍言简意赅,即消费者组是Kafka提供的可扩展且具有容错性的消费者机制
  • 但实际上,消费者组(Consumer Group)其实包含两个概念:
  • 作为队列,消费者组允许你分割数据处理到一组进程集合上(即一个消费者组中可以包含多个消费者进程,他们共同消费该topic’的数据),这有助于你的消费能力的动态调整
  • 作为-订阅模型(publish-subscribe), Kafka 允许你将同一份消息广播到多个消费者组里,以此来丰富多种数据使用场景
  • 需要注意的是:在消费者组中,多个实例共同订阅若干个主题,实现共同消费。同一个组下的每个实例都配置有相同的组ID,被分配不同的订阅分区。当某个实例挂掉的时候,其他实例会自动地承担起它负责消费的分区。因此,消费者组在一定程度上也保证了消费者程序的高可用性
  • 注意:消费者组的题目,能够帮你在某种程度上掌控下面的面试方向;
  • 如果你擅长位移值原理(Offset)”,就不妨再提一下消费者组的位移提交机制;
  • 如果你擅长 Kafka Broker,可以提一下消费者组与Broker之间的交互;
  • 如果你擅长与消费者组完全不相关的 Producer ,那么就可以这么说︰“消费者组要消费的数据完全来自于Producer端生产的消息,我对Producer还是比较熟悉的”;
  • 总之,你总得对consumer group相关的方向有一定理解,然后才能像面试官表名你对某1块很理解;
  • 一个分区只能被同一个 Consumer Group 中的一个 Consumer 消费,分区内消费有序同一Consumer Group中的多个Consumer实例,不同时消费同一个partition,等效于队列模式

什么是Partition (分区):

  • 可以理解为将标准 MQ 的 Queue 的消息进行拆分, 来实现高可用
  • Producer 发送的 Message, 根据 key 和 partition 数进行 hash, 然后进行投递
  • 一个消费者可消费多个分区,一个分区可被多个消费组消费,但同一消费组内仅能有一个消费者同时消费1个分区,等效于队列模式,分区内消费有序
  • Partition 属于 Topic 的一部分。一个 Topic 可以有多个 Partition ,并且同一 Topic 下的 Partition 可以分布在不同的 Broker 上,这也就表明一个 Topic 可以横跨多个 Broker一个分区只对应一个 Broker,一个 Broker 可以管理多个分区
  • 对于partition,顺序读写磁盘数据,以时间复杂度O(1)方式提供消息持久化能力
  • topic是逻辑的概念,partition是物理的概念
  • Kafka 的消费模式和发送模式都是以 Partition 为分界对于一个 Topic 的并发量限制在于有多少个 Partition, 就能支撑多少的并发
  • producer只需要关心消息发往哪个topic,而consumer只关心自己订阅哪个topic,并不关心每条消息存于整个集群的哪个broker
  • 一个分区只能被同一个 Consumer Group 中的一个 Consumer 消费,分区内消费有序同一Consumer Group中的多个Consumer实例,不同时消费同一个partition,等效于队列模式
  • 再来看Kafka 的 Partition,Kafka 的消费模式和发送模式都是以 Partition 为分界。也就是说对于一个 Topic 的并发量限制在于有多少个 Partition, 就能支撑多少的并发
  • 一个 Topic 可以横跨多个 Broker
  • 一个分区只对应一个Broker,一个Broker可以管理多个分区
  • kafka可以将主题划分为多个分区(Partition),会根据分区规则选择把消息存储到哪个分区中

参考文献

  • JavaGuide
  • 马士兵
  • 大数据架构网