kafka17-消息阻塞原理及优化方案

目录

Broker 端负载不均衡导致消息阻塞

硬盘使用率不均衡和 IOutil 不均衡场景

数据迁移解决方案

基于空闲硬盘优先的分区迁移示例 

生成迁移计划:

提交迁移计划:

验证迁移计划:

自动负载均衡工具:

PageCache 容量不足导致消息阻塞 

PageCache导致消息阻塞原理

 解决方法

Kafka 和 Flink 实时作业混合部署导致消息阻塞

混合部署的背景

解决方案

生产者buffer.memory容量不足

buffer.memory容量不足导致消息发送阻塞的原理

RecordAccumulator 类中的注释和逻辑

BufferPool 类中的 allocate 方法

解决方案

 


Broker 端负载不均衡导致消息阻塞

硬盘使用率不均衡和 IOutil 不均衡场景

  1. 分区设计不合理:如果某些 Topic 的流量远大于其他 Topic,或者生产者在发送消息时指定了分区,而未指定的分区没有消息,这可能导致节点间或分区间的数据不均衡。

  2. 副本分配不均:每个分区有一个或多个副本分布在不同的 Broker 节点上。如果副本分配策略不当,可能导致某些节点或磁盘的负载过高。

  3. 磁盘性能差异:如果集群中使用的磁盘性能参差不齐,可能会导致性能较差的磁盘成为瓶颈,进而影响整体性能。

  4. 热点 Topic:某些特别热门的 Topic 可能会导致对应的磁盘负载不均衡。

  5. Broker 扩容问题:Kafka 扩容了 Broker 节点后,如果新增的节点没有合理分配分区,也会导致节点间的数据不均衡。

  6. Leader 副本切换:随着集群状态的变化,Leader 副本的切换或迁移可能导致个别 Broker 节点上的数据更多,进而导致节点间的数据不均衡。

  7. 客户端使用问题:客户端使用不当,如使用 key 进行 hash 分配可能导致生产倾斜,进而影响消费出现 lag。

数据迁移解决方案

  1. 评估迁移任务:在迁移之前,评估需要迁移的数据量和目标硬盘的容量,确保迁移后的数据分布均匀。

  2. 使用 Kafka 的迁移工具:使用 kafka-reassign-partitions.sh 工具进行数据迁移。注意,不同版本的 Kafka 工具有不同的特性,比如 2.6.0 版本支持并行提交迁移任务。

  3. 并行迁移与限流:在新版本中,可以利用并行迁移提高效率,但同时要设置合适的限流参数,以避免迁移过程中对正常业务造成影响。

  4. 选择合适的时间窗口:选择系统负载较低的时间段进行迁移,比如午夜之后,以减少对用户活跃时段的影响。

  5. 监控迁移进度:实时监控迁移进度和系统性能指标,确保迁移任务按计划进行,及时发现并解决迁移过程中的问题。

  6. 处理迁移中的资源竞争:迁移请求和实时消费数据的 poll() 操作共用 Fetcher 线程,因此要特别注意分区迁移可能对实时消费造成的影响。可能需要调整消费者的配置,比如增加消费者数量或调整 max.poll.records 参数。

  7. 优化 Kafka 配置:根据迁移任务的需求,可能需要临时调整 Kafka 配置,比如调整 replica.alter.log.dirs.count 参数来控制副本的日志目录数量。

  8. 使用监控工具:使用 Kafka Manager、Burrow 或其他监控工具监控集群状态,确保迁移过程中集群的健康。

  9. 准备回滚计划:在迁移前准备好回滚计划,以便在迁移出现问题时能够快速恢复到迁移前的状态。

基于空闲硬盘优先的分区迁移示例 

生成迁移计划:

  1. 准备描述文件 move-json-file.json,示例如下:

    {
      "topics": [
        {"topic": "test-topic"}
      ],
      "version": 1
    }
  2. 使用以下命令生成迁移计划,假设Kafka 集群的 Bootstrap Server 是 test-1:9092,并且在 Broker 101, 102, 103 上重新分布分区:

    bin/kafka-reassign-partitions.sh --bootstrap-server test-1:9092 --topics-to-move-json-file move-json-file.json --broker-list "101,102,103" --generate

提交迁移计划:

  1. 将生成的迁移方案保存到 topics-to-move.json 文件中。

  2. 使用以下命令提交迁移计划,并设置合适的 --throttle--replica-alter-log-dirs-throttle 参数以控制迁移

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值