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

kafka的文章

1.面试的问题

  • 要点 至多一次、恰好一次
  • 数据一致性
  • 超时重试、幂等
  • 消息顺序
  • 消息挤压
  • 延时消息

1.1 kafaka 生产消息的过程。

在消息发送的过程中,涉及到了两个线程,一个是main 线程,一个是sender 线程。在main 线程中创建了一个双端队列 RecordAccumulator,main 线程将消息发送到 双端队列,sender 线程不断从双端队列读取 发送到 broker

1.2 消息队列的可靠性。

1.3 副本同步机制

leo: 定义:LEO 即日志末端偏移量,它表示每个副本日志中最后一条消息的下一个偏移量。
hw:高水位(HW,High Watermark)的确是 ISR(In - Sync Replicas,同步副本集合)中所有副本的最小日志末端偏移量(LEO,Log End Offset)
Kafka 的副本同步机制
Kafka 的副本同步机制是保障数据可靠性和高可用性的核心特性,下面从整体架构、同步流程、ISR 机制、相关参数等方面进行详细介绍。
整体架构

  • Kafka 中每个分区都有一个 Leader 副本和多个 Follower 副本。生产者和消费者只与 Leader 副本进行交互,Follower 副本负责从 Leader 副本同步数据。这样的设计使得 Kafka 可以在多个 Broker 上存储数据副本,提高数据的容错能力。
    同步流程
  1. 消息生产
    生产者将消息发送到 Kafka 集群时,会指定要发送到的主题和分区。Kafka 根据分区的 Leader 副本位置,将消息发送到对应的 Leader 副本所在的 Broker。
  2. Leader 副本接收消息
    Leader 副本接收到生产者发送的消息后,将消息写入本地日志,并更新自身的日志末端偏移量(LEO)。
  3. Follower 副本同步消息
    Follower 副本通过向 Leader 副本发送 Fetch 请求来同步消息。Fetch 请求中包含 Follower 副本当前的 LEO,Leader 副本根据该信息将新的消息发送给 Follower 副本。
    Follower 副本接收到消息后,将消息写入本地日志,并更新自身的 LEO。
  4. 高水位(HW)更新
    高水位(HW)是分区中所有副本都已经成功复制的消息的最大偏移量。Kafka 会根据 ISR(In - Sync Replicas,同步副本集合)中所有副本的 LEO 来更新 HW。具体来说,HW 是 ISR 中最小的 LEO。
    只有偏移量小于 HW 的消息才被认为是已经在所有同步副本中安全保存的,可以被消费者消费。
    ISR 机制
  5. ISR 定义
    ISR 是与 Leader 副本保持同步的一组副本集合。只有在 ISR 中的副本,才被认为是可靠的同步副本,能够参与 HW 的计算。
  6. ISR 动态维护
    Kafka 会定期检查 Follower 副本与 Leader 副本的同步情况,通过比较 LEO 的差距来判断 Follower 副本是否落后。如果 Follower 副本的 LEO 与 Leader 副本的 LEO 差距超过一定阈值(由 replica.lag.time.max.ms 参数控制),则该 Follower 副本会被从 ISR 中移除。
    当落后的 Follower 副本追上 Leader 副本后,它可以重新加入 ISR。
  7. ISR 的作用
    提高数据可靠性:只有 ISR 中的副本参与 HW 的计算,确保消费者只能读取到已经在多个副本中安全保存的消息。
    故障转移:当 Leader 副本出现故障时,Kafka 会从 ISR 中选举出新的 Leader 副本,保证数据的一致性和服务的连续性。
    相关参数
  8. acks 参数
    该参数用于控制生产者发送消息时的确认机制,影响副本同步策略。
    acks = 0:生产者发送消息后,不等待任何确认,相当于异步复制,性能最高但数据可靠性最低。
    acks = 1:生产者发送消息后,等待 Leader 副本确认,只要 Leader 副本写入成功就返回响应,性能和可靠性适中。
    acks = all 或 acks = -1:生产者发送消息后,等待所有 ISR 中的副本确认,相当于同步复制,数据可靠性最高但性能最低。
  9. min.insync.replicas 参数
    用于指定 ISR 中最少需要有多少个副本同步消息,才能认为消息写入成功。结合 acks = all 使用时,可以进一步增强数据的可靠性。如果 ISR 中的副本数量小于 min.insync.replicas,生产者发送消息时会收到写入失败的响应。
  10. replica.lag.time.max.ms 参数
    该参数定义了 Follower 副本与 Leader 副本之间允许的最大延迟时间。如果 Follower 副本在该时间内没有向 Leader 副本发送 Fetch 请求或者没有追上 Leader 副本的 LEO,则会被从 ISR 中移除。
    异常情况处理
  11. Leader 副本故障
    当 Leader 副本所在的 Broker 出现故障时,Kafka 会从 ISR 中选举出新的 Leader 副本。新的 Leader 副本会将 HW 作为新的起始偏移量,继续处理生产者和消费者的请求。
  12. Follower 副本故障
    如果某个 Follower 副本出现故障,它会被从 ISR 中移除。当该副本恢复正常后,会重新向 Leader 副本发送 Fetch 请求,追赶 Leader 副本的进度,当追上后可以重新加入 ISR。
    综上所述,Kafka 的副本同步机制通过 Leader - Follower 架构、ISR 机制和相关参数的配置,在保证数据可靠性和高可用性的同时,兼顾了性能和容错能力。

1.4 kafka 高性能、高吞吐原因

  • 磁盘顺序读写
    • 顺序读 会使用预读
    • 保证了消息的堆积 相比于内存。
  • 使用了零拷贝的技术
  • 分区分段 + 索引
    • 每个 分区 在磁盘上 按照segment 文件存储的。针对segment 建立.index的索引文件
  • 批量压缩 多条消息批量压缩传输,降低带宽
  • 批量读写

1.5 消息丢失的场景 解决方案

  1. ack=all,
  2. 配置 min.insync.replicas>1

1.6 消息可靠性的解决方案

消息发送

  • ack -1/all 、
  • unclean.leader.election.enable: false, 禁止选举 isr 以外的follower为leader
  • tries >1 重试次数
  • min.insync.replicas>1 同步副本数,没满足该之前,不提供 读写服务。
    综上所述,在 acks = all 且 min.insync.replicas = 3,副本总数为 5 个的情况下,至少 3 个处于 ISR 中的副本写入数据完成,Kafka 才会判定消息写入操作完成。

消费者

  • 手动提交 offset
  • broker 减少刷盘间隔
  • 事务消息

1.7 kafka reblance

  • 消费者分区策略
  1. range 范围分区 默认
  2. roundrobin 轮询
  3. sticky 策略 体现在 reblance 策略下。
  • 触发reblance 的时间
  1. 消费者组成员个数变化的时候。 有新的消费者加入、离开消费者组
  2. 订阅的topic 发生变化
  3. 订阅topic 的分区发生变化
  • coordinator 协调过程
  1. 消费者 找到消费者组中的 协调器
  2. 确定分区策略

system design interview 书

第八章 设计短链系统

kafka 笔记

尚硅谷-笔记


http://www.kler.cn/a/598355.html

相关文章:

  • 各类神经网络学习:(三)RNN 循环神经网络(中集),同步多对多结构的详细解释
  • Python Django入门(创建应用程序)
  • 【STM32】SPI通信外设硬件SPI读写W25Q64
  • 【开源宝藏】30天学会CSS - DAY5 第五课 脉冲动画
  • 利用matlab实现贝叶斯优化算法(BO)优化梯度提升决策树(GBDT)
  • 阻塞队列:原理、应用及实现
  • 密集球光照贴图生成
  • 什么情况下spring的事务会失效
  • 【WAF 安全实践】
  • 基于TCP/QT/C++的网络调试助手测试报告
  • 手机扫描仪 含PDF转word功能+OCR识别110种语言
  • 01_JavaScript
  • 深度学习之防止过拟合
  • 307 Temporary Redirect 解决办法 httpx
  • nebula graph传统使用Docker进行项目发版
  • 【笔记分享】NCS/Zephyr USB MSC实现方法介绍
  • 使用 Python 和 python-pptx 构建 Markdown 到 PowerPoint 转换器
  • 153页PPT华为市场管理全景:战略、逻辑、阶段与工具深度解析
  • 从扩展黎曼泽塔函数构造物质和时空的结构-3
  • 高性能缓存:使用 Redis 和本地内存缓存实战示例