Kafka 解惑

Kafka 是一个优秀的分布式消息中间件,许多系统中都会使用到 Kafka 来做消息通信。
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。

保证高可用:

在分布式数据系统中,通常使用分区来提高系统的处理能力,通过副本来保证数据的高可用性。多分区意味着并发处理的能力,这多个副本中,只有一个是 leader,而其他的都是 follower 副本。仅有 leader 副本可以对外提供服务。多个 follower 副本通常存放在和 leader 副本不同的 broker 中。通过这样的机制实现了高可用,当某台机器挂掉后,其他 follower 副本也能迅速"转正",开始对外提供服务。

  1. ???

(*)什么是分布式消息中间件?

是一种在分布式系统中负责消息的发送、接收和传递的软件组件或系统;

通信,队列,分布式,生产消费者模式。

(*)消息中间件的作用是什么?解耦、峰值处理、异步通信、缓冲。

(*)消息中间件的使用场景是什么?异步通信,消息存储处理。

(*)消息中间件选型?语言,协议、HA(高可用性)、数据可靠性、性能、事务、生态、简易、推拉模式。

  1. ???

(*)Kafka 的架构?

Producer、Consumer、Consumer Group、Topic、Partition

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

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

(*)Kafka 如何广播消息?

Consumer group

一个Topic可以对应多个Consumer Group。如果需要实现广播,只要每个Consumer有一个独立的Group就可以了。

(**)Kafka 的消息是否是有序的?

Topic 级别无序,Partition 有序

(*)Kafka 是否支持读写分离?

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

(*)Kafka 如何保证数据高可用?

副本,ack,HW

一些参数的配置,例如ack的配置、生产者重试、isr最小数量,消费者改为手动提交等方式来尽可能的保障Kafka的消息可靠性。

HW:

  • 定义消息的可见性,即用来标识分区下的哪些消息是可以被消费的
  • 帮助Kafka完成副本同步。

(*)Kafka 中 zookeeper 的作用?

集群管理,元数据管理

(*)是否支持事务?

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

(*)分区数是否可以减少?

不可以,会丢失数据

* Kafka producer 的正常生产逻辑包含以下几个步骤:

(1)配置生产者客户端参数常见生产者实例;

(2)构建待发送的消息;

(3)发送消息;

(4)关闭生产者实例。

Producer 发送消息的过程,需要经过拦截器,序列化器和分区器,最终由累加器批量发送至 Broker。

* Kafka Consumer Client 消费消息通常包含以下步骤:

(1)配置客户端,创建消费者;

(2)订阅主题;

(3)拉取消息并消费;

(4)提交消费位移;

(5)关闭消费者实例;

Kafka

* Rebalance 的触发条件有三种:

(*) 组成员发生变更(新 consumer 加入组、已有 consumer 主动离开组或已有 consumer 崩溃);

(*) 订阅主题数发生变更;

(*) 订阅主题的分区数发生变更。

  1. ???

(*)Kafka 有哪些命令行工具?/bin目录,管理 kafka 集群、管理 topic、生产和消费 kafka

(*)Kafka Producer 的执行过程?拦截器,序列化器,分区器和累加器

(*)Kafka Producer 有哪些常见配置?broker 配置,ack 配置,网络和发送参数,压缩参数,ack 参数

(**)如何让 Kafka 的消息有序 ?Kafka 在 Topic 级别本身是无序的,只有 partition 上才有序,所以为了保证处理顺序,可以自定义分区器,将需顺序处理的数据发送到同一个 partition

(*)Producer 如何保证数据发送不丢失?ack 机制,重试机制

(*)如何提升 Producer 的性能?批量,异步,压缩

(*)如果同一 group 下 consumer 的数量大于 part 的数量,kafka 如何处理?多余的 consumer 将处于无用状态,不消费数据

(*)Kafka Consumer 是否是线程安全的?不安全,单线程消费,多线程处理

(*)讲一下使用 Kafka Consumer 消费消息时的线程模型,为何如此设计?

拉取和处理分离

(*)Kafka Consumer 的常见配置?

  • broker,
  • 网络和拉取参数,
  • 心跳参数

(*)Consumer 什么时候会被踢出集群?崩溃,网络异常,处理时间过长提交位移超时

(*)当有 Consumer 加入或退出时,Kafka 会作何反应?

进行 Rebalance

(*)什么是 Rebalance,何时会发生 Rebalance?

  • topic 变化,
  • Partition变化,
  • consumer 变化

4.???

(*)Kafka 如何保证高可用?

通过副本来保证数据的高可用,producer ack、重试、自动 Leader 选举,Consumer 自平衡

(*)Kafka 的交付语义?

交付语义一般有at least once、at most once和exactly once。kafka 通过 ack 的配置来实现前两种。

(*)Replic 的作用?

实现数据的高可用

(*)什么是 AR,ISR?

AR:Assigned Replicas。AR 是主题被创建后,分区创建时被分配的副本集合 ,副本个数由副本因子决定。

ISR:In-Sync Replicas。Kafka 中特别重要的概念,指代的是 AR 中那些与 Leader 保持同步的副本集合 。在 AR 中的副本可能不在 ISR 中,但 Leader 副本天然就包含在 ISR 中。关于 ISR,还有一个常见的面试题目是如何判断副本是否应该属于 ISR。目前的判断 依据是:Follower 副本的 LEO 落后 Leader LEO 的时间,是否超过了 Broker 端参数 replica.lag.time.max.ms 值。如果超过了,副本就会被从 ISR 中移除。

(*)Kafka 中的 HW 代表什么?

高水位值 (High watermark)。这是控制消费者可读取消息范围的重要字段。一个普通消费者只能"看到"Leader 副本上介于 Log Start Offset 和 HW(不含)之间的 所有消息。水位以上的消息是对消费者不可见的。

(*)Kafka 为保证优越的性能做了哪些处理?

partition 并发、顺序读写磁盘、page cache 压缩、高性能序列化(二进制)、内存映射无锁offset管理、Java NIO模型(non-blocking IO)

* Kafka 配置说明链接:https://kafka.apache.org/documentation

Kafka 使用 Zookeeper 完成以下功能:

● Kafka Controller 的 Leader 选举

● Kafka 集群成员管理

● Topic 配置管理

● 分区副本管理

Controller

是从 Broker 中选举出来的,负责分区 Leader 和 Follower 的管理。

职责包括下面几部分:

● 处理 Broker 节点的上线和下线

● 创建 Topic 或者 Topic 扩容分区,Controller 需要负责分区副本的分配工作,并主导 Topic 分区副本的 Leader 选举。

● 管理集群中所有的副本和分区的状态机,监听状态机变化事件,并作出相应的处理。

相关推荐
此时不提桶,更待何时6 小时前
06-23-A-RabbitMQ生态集成详解
分布式·rabbitmq
m0_6464299712 小时前
RabbitMQ 核心知识总结(生产实战版)
分布式·rabbitmq
DBA_G14 小时前
GBase 8c分布式数据库客户端工具 gsql
数据库·分布式
chunyublog14 小时前
Spark 词频统计练习
大数据·分布式·spark
ClouGence15 小时前
开源数据库管理工具 CloudDM 4.4.0 发布,新增 Kafka、SAP HANA 数据源
数据库·kafka
acrel715 小时前
高速公路分布式光伏并网电能质量与安全保护方案应用
分布式·安全
RobinXYuan15 小时前
【Kafka 源码手记】01 从消息队列到 Event Streaming
kafka·源码阅读
IT小小猪17 小时前
# Hadoop 3.3.6 完全分布式集群部署知识库
hadoop·分布式·eclipse
此时不提桶,更待何时17 小时前
06-24-B-RabbitMQ面试与生产事故实战
分布式·面试·rabbitmq
来福猿18 小时前
分布式锁 Redis 实现源码分析:SETNX、过期时间与可重入设计
数据库·redis·分布式