• 【Kafka】单分区单副本增加至多分区多副本


    一、背景

    系统:CentOS Linux release 7.9.2009 (Core)
    Kafka版本:2.11-2.0.0.3.1.4.0-315 [scala版本2.11;kafka 2.0.0版本;基于ambari3.1.4.0-315的版本 ]

    二、现象

    业务系统中总是报警:kafka消费延迟。

    三、问题排查过程

    1、通过监控发现,某个topic A(脱敏名)在业务高峰的时候,总是报消费延迟。
    2、不过经过查看监控发现,也有其他topic B(脱敏名)在峰值时,跟topic A生产数据量差不多,但是不会报消费延迟。
    3、查看消费速度,发现topic A的消费速率比topicB的消费速率低不少。消费延迟由此产生。
    4、查看topic A的分区发现,只有1个分区;而topic B的分区数量是20个。
    在这里插入图片描述
    在这里插入图片描述

    5、确定业务上消费者程序是4个。

    四、原因分析

    经过排查发现,topic A消费力差的原因是消费者数量太少。业务峰值时消费压力大大超过了单个消费者的消费能力(每个消费者同时在消费其他topic的数据)。

    五、解决

    增加分区数,提高消费并行度。
    1、选取最佳分区数

    当前5个kafka broker,有4个消费者程序。所以出于消费压力和存储负载的考虑,最佳分区数应该是4*5=20个。

    2、获取基础重分配文件内容

    首先填写当前topic的消息,用于获取重分配文件

    {"topics":[{"topic":"topicA"}],"version":1}
    
    • 1

    获取topicA的分区和副本数json格式结果

    /usr/hdp/current/kafka-broker/bin/kafka-reassign-partitions.sh --zookeeper zookeeper1.jdicity.local:2181 --topics-to-move-json-file topic-to-move.json --broker-list "1001,1002,1003,1004,1005" --generate
    
    • 1

    获取Proposed的json,作为后面重分配json文件的基础
    获取Proposed的json

    3、增加分区数
    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper zookeeper1.jdicity.local:2181 --topic topicA --alter --partitions 20
    
    • 1
    4、规划分区与broker的对应关系,编辑重分配json文件reassign-plan.json(20分区,3副本)

    通过

    {
        "version":1,
        "partitions":[
            {
                "topic":"topicA",
                "partition":0,
                "replicas":[
                    1003,
                    1002,
                    1001
                ]
            },
            {
                "topic":"topicA",
                "partition":1,
                "replicas":[
                    1002,
                    1003,
                    1004
                ]
            },
            {
                "topic":"topicA",
                "partition":2,
                "replicas":[
                    1003,
                    1004,
                    1005
                ]
            },
            ……
            {
                "topic":"topicA",
                "partition":19,
                "replicas":[
                    1003,
                    1004,
                    1005
                ]
            }
        ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    5、执行重分配
    /usr/hdp/current/kafka-broker/bin/kafka-reassign-partitions.sh --zookeeper zookeeper1.jdicity.local:2181 --reassignment-json-file reassign-plan.json --execute
    
    • 1
    6、查看结果
    /usr/hdp/current/kafka-broker/bin/kafka-reassign-partitions.sh --zookeeper zookeeper1.jdicity.local:2181 --reassignment-json-file reassign-plan.json --verify
    
    • 1

    执行中:
    进心中
    已经完成:
    全部完成
    分区和副本数已经更改:
    在这里插入图片描述

    六、反思与规避

    分区数增加后,未出现相同消费延迟的问题。

    好记性不如赖笔头。
    与君共勉。
    
    • 1
    • 2
  • 相关阅读:
    浅谈Python在人工智能领域的应用
    opencv入门到精通——图片,视频,摄像头的读取与保存
    1075 PAT Judge
    Hadoop HA搭建
    Other——电子产品的零售版本和OEM版本
    OpenCV的应用——快递二维码识别
    04 【折线图】
    C++:红黑树
    五大常用算法——贪心算法详解及经典例子
    前后端分离 基础(新增与查询)
  • 原文地址:https://blog.csdn.net/love910809/article/details/127886943