• Kafka增加Kafka Topic的分区复本数(0.8.2.1)


    增加Kafka Topic的分区复本数(0.8.2.1)

    2018-06-26 11:25:26 weixin_37648944 阅读数 51

    说明

    Kafka提供了一个工具,用于调整Topic中各个分区的复本数据。工具名称叫kafka-reassign-partitions.sh。

    过程

    创建一个Topic,共2个分区,副本数为2(共2份,含原始数据):

    /opt/kafka/bin/kafka-topics.sh --zookeeper data01:2181,data02:2181,data03:2181/kafka --create --replication-factor 2 --partitions 2 --topic testTopic1

    查看该Topic。分区0的Leader是1,分区1的Leader是2:

    
     
    1. [root@data01 bin]# /opt/kafka/bin/kafka-topics.sh --describe --zookeeper data01:2181,data02:2181,data03:2181/kafka --topic testTopic1

    2. Topic:testTopic1 PartitionCount:2 ReplicationFactor:2 Configs:

    3. Topic: testTopic1 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2

    4. Topic: testTopic1 Partition: 1 Leader: 2 Replicas: 2,3 Isr: 2,3

    5. [root@data01 bin]#

    准备一些数据,放在data.file中,然后将数据灌入Kakfa Topic:

    /opt/kafka/bin/kafka-console-producer.sh --broker-list data01:9092,data02:9092,data03:9092 --topic testTopic1 < data.file

    在各broker的数据目录下,可以看到当前对应的Topic分区目录:

    
     
    1. [root@cheyo tmp]# dsh -g kafka -c "du -sh /opt/kafka/kafka-logs/testTopic*"

    2. data01: 44K /opt/kafka/kafka-logs/testTopic1-0

    3. data02: 44K /opt/kafka/kafka-logs/testTopic1-0

    4. data02: 4.0K /opt/kafka/kafka-logs/testTopic1-1

    5. data03: 4.0K /opt/kafka/kafka-logs/testTopic1-1

    6. [root@cheyo tmp]#

    调整副本数据的配置是以json文件描述的,然后json文件作为参数传递给相关工具。json文件中描述了各个分区的复本如何放置。这里,我们分别为testTopic1的两个分区在原来的基础上新增加了第3个分区。

    replication.json:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    {
        "version": 1, 
        "partitions": [
            {
                "topic": "testTopic1", 
                "partition": 0, 
                "replicas": [
                    1, 
                    2, 
                    3
                ]
            },
            {
                "topic": "testTopic1", 
                "partition": 1, 
                "replicas": [
                    2, 
                    3, 
                    1
                ]
            }
        ]
    }
    

    执行更新复本操作:

    
     
    1. /opt/kafka/bin/kafka-reassign-partitions.sh --zookeeper data01:2181,data02:2181,data03:2181/kafka \

    2. --reassignment-json-file replication.json --execute

    这个操作需要一些时间,我们可以通过如下命令查看进度(将上述命令中的execute参数改为verify参数:

    
     
    1. /opt/kafka/bin/kafka-reassign-partitions.sh --zookeeper data01:2181,data02:2181,data03:2181/kafka \

    2. --reassignment-json-file replication.json --verify

    检查

    操作完成后,再次查看topic的详细信息,可以看到相应的分区已经增加:

    
     
    1. [root@data01 test]# /opt/kafka/bin/kafka-topics.sh --describe --zookeeper data01:2181,data02:2181,data03:2181/kafka --topic testTopic1

    2. Topic:testTopic1 PartitionCount:2 ReplicationFactor:3 Configs:

    3. Topic: testTopic1 Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3

    4. Topic: testTopic1 Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1

    5. [root@data01 test]#

    相应的数据目录也已经增加:

    
     
    1. [root@cheyo tmp]# dsh -g kafka -c "du -sh /opt/kafka/kafka-logs/testTopic*"

    2. data01: 44K /opt/kafka/kafka-logs/testTopic1-0

    3. data01: 4.0K /opt/kafka/kafka-logs/testTopic1-1

    4. data03: 40K /opt/kafka/kafka-logs/testTopic1-0

    5. data03: 4.0K /opt/kafka/kafka-logs/testTopic1-1

    6. data02: 44K /opt/kafka/kafka-logs/testTopic1-0

    7. data02: 4.0K /opt/kafka/kafka-logs/testTopic1-1

    8. [root@cheyo tmp]#

    工具/kafka-reassign-partitions.sh说明

    这个工具有三种参数:

    1、带--generate参数:生成建议的分区重分布方案

    2、带--execute参数:根据指定的分区重分布方案执行分区调整动作

    3、带--verify参数:查看--exceute操作的结果。

    本文档中使用了2和3两个参数。

    补充

    按这个用法,这个工具不仅可以用来增加分区数,在扩容broker数量等场景下,也可以用来调整各个分区在各个节点上的分布。

    参考文档

    1. Kafka如何动态增加Topic的副本(Replication)
  • 相关阅读:
    JS函数机制小结
    面向对象的JS随笔
    web性能优化
    css布局
    Spark内存管理
    Scala中==,eq与equals的区别
    Java中char占用几个字节
    Java中long和double的原子性
    elk-filebeat收集docker容器日志
    Spring Boot多数据源配置(二)MongoDB
  • 原文地址:https://www.cnblogs.com/grj001/p/12223621.html
Copyright © 2020-2023  润新知