当前位置: 首页 > news >正文

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(高可用性)、数据可靠性、性能、事务、生态、简易、推拉模式。

2. ???
(*)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 崩溃);
(*) 订阅主题数发生变更;
(*) 订阅主题的分区数发生变更。

3. ???
(*)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 选举。
● 管理集群中所有的副本和分区的状态机,监听状态机变化事件,并作出相应的处理。

相关文章:

  • 你对于JVM底层的理解
  • Python面向对象编程(OOP)深度解析:从封装到继承的多维度实践
  • Room持久化库:从零到一的全面解析与实战
  • 5. 动画/过渡模块 - 交互式仪表盘
  • 车载网关作为车辆网络系统的核心枢纽
  • spark MySQL数据库配置
  • 基于 Amazon Bedrock 和 Amazon Connect 打造智能客服自助服务 – 设计篇
  • 涌现理论:连接万物的神秘力量
  • Kafka、RabbitMQ、RocketMQ的区别
  • 地址簿模块-01.需求分析
  • python训练营day23
  • Spark,RDD中的行动算子
  • 深度剖析:Vue2 项目兼容第三方库模块格式的终极解决方案
  • 正则表达式常用验证(一)
  • 【python】—conda新建python3.11的环境报错
  • 无人机信号监测系统技术解析
  • 【Java】网络编程(Socket)
  • Mac上安装Mysql的详细步骤及配置
  • git-gui界面汉化
  • android 权限配置
  • 新闻1+1丨婚姻登记服务,如何跑出幸福加速度?
  • 男子退机票被收票价90%的手续费,律师:虽然合规,但显失公平
  • 夜读丨取稿费的乐趣
  • 通辽警方侦破一起积压21年的命案:嫌疑人企图强奸遭反抗后杀人
  • 普京:俄中关系是国家间关系的真正典范
  • 4月证券私募产品备案量创23个月新高,股票策略占比超六成