Kafka 核心问题

  • 简单讲下 Kafka 的架构?
  • Kafka 是推模式还是拉模式,推拉的区别是什么?
  • Kafka 如何广播消息?
  • Kafka 的消息是否是有序的?
  • Kafka 是否支持读写分离?
  • Kafka 如何保证数据高可用?
  • Kafka 中 zookeeper 的作用?
  • 是否支持事务?
  • 分区数是否可以减少?

Kafka 架构中的一般概念:

kafka 三高架构_zookeeper

架构

  • Producer:生产者,也就是发送消息的一方。生产者负责创建消息,然后将其发送到 Kafka。
  • Consumer:消费者,也就是接受消息的一方。消费者连接到 Kafka 上并接收消息,进而进行相应的业务逻辑处理。
  • Consumer Group:一个消费者组可以包含一个或多个消费者。使用多分区 + 多消费者方式可以极大提高数据下游的处理速度,同一消费组中的消费者不会重复消费消息,同样的,不同消费组中的消费者消息消息时互不影响。Kafka 就是通过消费组的方式来实现消息 P2P 模式和广播模式。
  • Broker:服务代理节点。Broker 是 Kafka 的服务节点,即 Kafka 的服务器。
  • Topic:Kafka 中的消息以 Topic 为单位进行划分,生产者将消息发送到特定的 Topic,而消费者负责订阅 Topic 的消息并进行消费。
  • Partition:Topic 是一个逻辑的概念,它可以细分为多个分区,每个分区只属于单个主题。同一个主题下不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。
  • Offset:offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,也就是说,Kafka 保证的是分区有序性而不是主题有序性。
  • Replication:副本,是 Kafka 保证数据高可用的方式,Kafka 同一 Partition 的数据可以在多 Broker 上存在多个副本,通常只有主副本对外提供读写服务,当主副本所在 broker 崩溃或发生网络一场,Kafka 会在 Controller 的管理下会重新选择新的 Leader 副本对外提供读写服务。
  • Record:实际写入 Kafka 中并可以被读取的消息记录。每个 record 包含了 key、value 和 timestamp。

Kafka Topic Partitions Layout

kafka 三高架构_zookeeper_02

主题

Kafka 将 Topic 进行分区,分区可以并发读写。

Kafka Consumer Offset

kafka 三高架构_数据_03

consumer offset

zookeeper

kafka 三高架构_数据_04

zookeeper

  • Broker 注册:Broker 是分布式部署并且之间相互独立,Zookeeper 用来管理注册到集群的所有 Broker 节点。
  • Topic 注册:在 Kafka 中,同一个 Topic 的消息会被分成多个分区并将其分布在多个 Broker 上,这些分区信息及与 Broker 的对应关系也都是由 Zookeeper 在维护
  • 生产者负载均衡:由于同一个 Topic 消息会被分区并将其分布在多个 Broker 上,因此,生产者需要将消息合理地发送到这些分布式的 Broker 上。
  • 消费者负载均衡:与生产者类似,Kafka 中的消费者同样需要进行负载均衡来实现多个消费者合理地从对应的 Broker 服务器上接收消息,每个消费者分组包含若干消费者,每条消息都只会发送给分组中的一个消费者,不同的消费者分组消费自己特定的 Topic 下面的消息,互不干扰。

答案

简单讲下 Kafka 的架构?

Producer、Consumer、Consumer Group、Topic、Partition

Kafka 是推模式还是拉模式,推拉的区别是什么?

Kafka Producer 向 Broker 发送消息使用 Push 模式,Consumer 消费采用的 Pull 模式。拉取模式,让 consumer 自己管理 offset,可以提供读取性能

Kafka 如何广播消息?

Consumer group

Kafka 的消息是否是有序的?

Topic 级别无序,Partition 有序

Kafka 是否支持读写分离?

不支持,只有 Leader 对外提供读写服务

Kafka 如何保证数据高可用?

副本,ack,HW

Kafka 中 zookeeper 的作用?

集群管理,元数据管理

是否支持事务?

0.11 后支持事务,可以实现”exactly once“

分区数是否可以减少?

不可以,会丢失数据

kafka 三高架构_zookeeper_05