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正常
相关推荐
菜鸟是大神3 小时前
Kafka为什么要放弃Zookeeper
分布式·zookeeper·kafka
m0_748235079 小时前
SpringBoot集成kafka
spring boot·kafka·linq
Lin_Miao_0914 小时前
Kafka优势
分布式·kafka
斯普信专业组14 小时前
全面Kafka监控方案:从配置到指标
kafka
zhangpfly17 小时前
OpenEuler22.04配置zookeeper+kafka三节点集群
分布式·zookeeper·kafka
斯普信专业组1 天前
kafka的备份策略:从备份到恢复
kafka
斑驳竹影1 天前
kafka的配置
分布式·kafka
web130933203981 天前
flume对kafka中数据的导入导出、datax对mysql数据库数据的抽取
数据库·kafka·flume
张铁铁是个小胖子2 天前
消息中间件RabbitMQ和kafka
分布式·kafka·rabbitmq