基础架构

  • Producer : 消息生产者,就是向 kafka broker 发消息的客户端 ;
  • Consumer : 消息消费者,向 Kafka broker 取消息的客户端;
  • Consumer Group (CG): 消费者组,由多个 consumer 组成。 消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。 所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者
  • Broker :一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。
  • Topic :可以理解为一个队列, 生产者和消费者面向的都是一个 topic;
  • Partition: 为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列;
  • Replica: 副本(Replication),为保证集群中的某个节点发生故障时, 该节点上的 partition 数据不丢失,且 Kafka 仍然能够继续工作, Kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower。
  • Leader: 每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。
  • Follower: 每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据的同步。 leader 发生故障时,某个 Follower 会成为新的 leader。

Producer

Producer 将数据 发布到指定的 topic 主题。同时 Producer 也能决定将此消息归属于哪个 partition;

Topic

一个 Topic 可以认为是一类消息,每个 topic 将被分成多个 partition(区),每个 partition 在存储层面是 append log 文件

Topic 是发布记录的类别或订阅源名称。Kafka 的主题总是多用户;也就是说,一个主题可以有多个消费者订阅写入它的数据。

对于每个 Topic,Kafka 群集都维护一个如下所示的分区(Partition)日志:

一个 Topic 的多个分区(Partition),被分布在 kafka 集群中的多个 Broker 上。每个 Broker(kafka 实例)负责分区(Partition)中消息的读写操作。此外 kafka 还可以配置分区(Partition)需要备份的个数(replica),每个分区(Partition)将会被备份到多台机器上,以提高可用性.

基于 replicated 方案,那么就意味着需要对多个备份进行调度。每个分区(partition)都有一个 kafka 实例为 leader。leader 负责所有的读写操作,如果 leader 失效,那么将会有其他 follower 来接管(成为新的 leader)。而 follower 只是单调的和 leader 同步消息即可。

由此可见作为 leader 的实例承载了全部的请求压力,因此从集群的整体考虑,有多少个分区(partition)就意味着有多少个 leader,kafka 会将”leader”均衡的分散在每个实例上,来确保整体的性能稳定。

Consumer

本质上 kafka 只支持 Topic。每个 consumer 属于一个 consumer group(CG)。反过来说,每个 group 中可以有多个 consumer。

发送到 Topic 的消息,只会被订阅此 Topic 的每个 group 中的一个 consumer消费。

  • 如果所有消费者实例(consumer)具有相同的消费者组(consumer group),则记录将有效地在消费者实例上进行负载平衡
  • 如果所有消费者实例具有不同的消费者组,则每个记录将广播到所有消费者进程

offset

每个分区(Partition)都是一个有序的,不可变的记录序列,不断附加到结构化的提交日志中。分区中的记录每个都分配了一个称为偏移的顺序 ID 号,它唯一的标识分区中的每个记录,这个标识就是 offset。

简单来说就是 kafka 消费者在会保存其消费的进度,也就是 offset。

Kafka 集群持久保存所有已发布的记录 - 无论是否已使用 - 使用可配置的保留期。例如,如果保留策略设置为两天,则在发布记录后的两天内,它可供使用,之后将被丢弃以释放空间。Kafka 的性能在数据大小方面实际上是恒定的,因此长时间存储数据不是问题。

Replica

Kafka 副本作用:提高数据可靠性。

Kafka 默认副本 1 个,生产环境一般配置为 2 个,保证数据可靠性;太多副本会增加磁盘存储空间,增加网络上数据传输,降低效率

Kafka 中副本分为:Leader 和 Follower。Kafka 生产者只会把数据发往 Leader,然后 Follower 找 Leader 进行同步数据。

AR

Kafka 分区中的所有副本统称为 AR(Assigned Repllicas)。

AR = ISR + OSR

  • ISR:和 Leader 保持同步的 Follower+Leader 集合。如果 Follower 长时间未向 Leader 通信请求或同步数据,则该 Follower 将被踢出 ISR,该时间阈值由 replica.lag.time.max.ms 参数设定,默认 30s 。Leader 发生故障之后,就会从 ISR 中选举新的 Leader

  • OSR,表示 Follower 与 Leader 副本同步时,延迟过多的副本