Kafka数据迁移全解析:同集群和跨集群

文章目录

Kafka两种迁移场景,分别是同集群数据迁移、跨集群数据迁移。

一、同集群迁移


应用场景

broker 迁移 主要使用的场景是broker 上线,下线,或者扩容等.基于同一套zookeeper的操作。

实践

将需要新添加的broker 列表一并添加到kafka的集群中。(启动新的kafka指定同一套zk)Kafka由之前的三节点,扩容至四节点。

数据迁移

  1. 查询信息:(四个分区分布在三台机器上)

  2. 新建json文件:

    cat topic-to-move.json

    {
    "topics": [
    {"topic": "test-topic"}
    ],
    "version":1
    }

  3. 获取重新分配方案:

    kafka-reassign-partitions.sh --zookeeper node1:2181,node2:2181,node3:2181 --topics-to-move-json-file topics-to-move.json --broker-list "150,151,155,159" --generate

##通过kafka-reassign-partitions.sh 获取重新分配方案,--broker-lsit 的参数 "150,151,155,159"是指集群中每个broker的id,由于我们是需要将所有topic均匀分配到扩完结点的4台机器上,所以要指定。同理,当业务改变为将原来的所有数据从旧节点(0,5,9)迁移到新节点(1)实现数据平滑迁移,这时的参数应"4"

,执行后会出现以下内容:

复制新的方案到一个json文件 assignplan.json (文件名不重要,文件格式也不一定要以json为 结尾,只要保证内容是json即可)

复制代码
 ./kafka-reassign-partitions.sh --zookeeper node1:2181 --reassignment-json-file assignplan.json --execute

完成后查看topic信息:(四个分区分布在四台机器上)

二、跨集群迁移


应用场景

主要用于kafka 集群的变更. 将数据同步等操作. 相当于是实现了双打.等各项数据消费端在零误差的对接好了后,可以停掉就集群

数据迁移 :
MirrorMaker

  1. 修改kafka配置
    consumer.properties(内容为原始集群信息)

    #config/consumer.properties 在网上看到有在此配置zookeeper的应该是之前的老版本。kafka_2.11-2.4.1中不需要
    bootstrap.servers=kafka-cluster1:9092,kafka-cluster1:9093 # source-cluster的broker list
    group.id=test-consumer-group1 # 自定义一个消费者的group id
    auto.offset.reset= # latest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据; earliest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费; none:topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常

producer.properties(内容为新集群信息)

#config/producer.properties 在网上看到有在此配置zookeeper的应该是之前的老版本。kafka_2.11-2.4.1中不需要

bootstrap.servers=kafka-cluster2:9092,kafka-cluster2:9093 # destination-cluster的broker list

compression.type=none # 数据压缩方式none, gzip, snappy, lz4, zstd

partitioner.class= # 指定分区程序路径,默认为随机分区

request.timeout.ms= # 请求超时时间

max.block.ms= # KafkaProducer.send and KafkaProducer.partitionsFor 阻塞时间

linger.ms= # 等待指定时间后批量发送

max.request.size= # 发送消息最大字节数

batch.size= # 单次批量处理的字节数

buffer.memory= # 指定等待发送消息的缓冲区大小

执行操作:

复制代码
./kafka-mirror-maker.sh --consumer.config ../config/consumer.properties --producer.config ../config/producer.properties --whitelist 'test'

说明:

  1. --num.streams: 指定流就是指定消费者,所有消费者公用一个生产者。
  2. --whitelist: 表明需要同步的白名单,可以使用"|"来连接多个topic,还可以使用正则表达式。可设置黑名单。

ZK迁移:

  1. zk迁移就比较简单了,起新节点加入zk集群,稳定后关停旧节点。
  2. 新增broker加入集群,将所有topic分区只分配给新broker,执行分配任务后,kafka将旧broker的分区数据复制到新broker,新broker成为各分区的leader,随后kafka删除旧broker上的分区数据;
  3. 整个过程中客户端应用正常生产消费消息,执行结束后使用新的消费者组从头消费可以获取到全部历史消息。
  4. 停止旧broker后,正在运行的客户端应用正常生产消费消息,新建客户端连接旧broker失败,连接新broker正常
相关推荐
山沐与山7 小时前
【MQ】Kafka与RocketMQ深度对比
分布式·kafka·rocketmq
yumgpkpm9 小时前
Cloudera CDP7、CDH5、CDH6 在华为鲲鹏 ARM 麒麟KylinOS做到无缝切换平缓迁移过程
大数据·arm开发·华为·flink·spark·kafka·cloudera
树下水月9 小时前
Easyoole 使用rdkafka 进行kafka的创建topic创建 删除 以及数据发布 订阅
分布式·kafka
Cat God 0079 小时前
基于Docker搭建kafka集群
docker·容器·kafka
Cat God 00710 小时前
基于 Docker 部署 Kafka(KRaft + SASL/PLAIN 认证)
docker·容器·kafka
KD14 小时前
设计模式——责任链模式实战,优雅处理Kafka消息
后端·设计模式·kafka
原神启动11 天前
Kafka详解
分布式·kafka
一只懒鱼a1 天前
搭建kafka集群(安装包 + docker方式)
运维·容器·kafka
青春不流名1 天前
如何在Kafka中使用SSL/TLS证书认证
分布式·kafka·ssl
青春不流名1 天前
Kafka 的认证机制
kafka