kafka常见的问题(具体详细)

本文详细探讨了 Kafka 如何实现高吞吐、低延迟,包括其使用页缓存、追加写和零拷贝技术。还介绍了 producer 和 consumer 的工作流程,以及重要的配置参数。此外,讨论了数据丢失、重复、分区策略和乱序问题的解决方案,以及 Kafka 集群中 leader 和 follower 的故障恢复机制,强调了 Zookeeper 在 Kafka 中的作用。
摘要由CSDN通过智能技术生成

1. Kafka 如何做到高吞吐、低延迟的呢?

这里提下 Kafka 写数据的大致方式:先写操作系统的页缓存(Page Cache),然后由操作系统自行决定何时刷到磁盘。

因此 Kafka 达到高吞吐、低延迟的原因主要有以下 4 点:

  • 页缓存是在内存中分配的,所以消息写入的速度很快。
  • Kafka 不必和底层的文件系统进行交互,所有繁琐的 I/O 操作都由操作系统来处理。
  • Kafka 采用追加写的方式,避免了磁盘随机写操作。
  • 使用以 sendfile 为代表的零拷贝技术提高了读取数据的效率。

PS: 使用页缓存而非堆内存还有一个好处,就是当 Kafka broker 的进程崩溃时,堆内存的数据会丢失,但是页缓存的数据依然存在,重启 Kafka broker 后可以继续提供服务。

2. Kafka 的 producer 工作流程?

 

 

  1. 封装为 ProducerRecord 实例
  2. 序列化
  3. 由 partitioner 确定具体分区
  4. 发送到内存缓冲区
  5. 由 producer 的一个专属 I/O 线程去取消息,并将其封装到一个批次 ,发送给对应分区的 kafka broker
  6. leader 将消息写入本地 log
  7. followers 从 leader pull 消息,写入本地 log 后 leader 发送 ACK
  8. leader 收到所有 ISR 中的 replica 的 ACK 后,增加 HW(high watermark,最后 commit 的 offset) 并向 producer 发送 ACK

3. Kafka 的 consumer 工作流程?

  1. 连接 ZK 集群,拿到对应 topic 的 partition 信息和 partition 的 leader 的相关信息
  2. 连接到对应 leader 对应的 broker
  3. consumer 将自己保存的 offset 发送给 leader
  4. leader 根据 offset 等信息定位到 segment(索引文件和日志文件)
  5. 根据索引文件中的内容,定位到日志文件中该偏移量对应的开始位置读取相应长度的数据并返回给 consumer

4. 重要参数有哪些?

  1. acks
  • acks &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值