我有一个Kafka2节点集群。我的Kafka版本是0.8.1。我需要将它迁移到另一组服务器。迁移时保持不停机和不丢失数据的最佳方法是什么?
2nbm6dog1#
假设新服务器和旧服务器一起生活在同一个数据中心中,最简单的方法是为所有现有分区添加新服务器作为副本。Kafka将使他们同步成为ISR。如果它们是同步的,您应该能够安全地关闭旧节点。这当然取决于你的消费者是如何配置的(他们会自动找到新的节点吗?)以及你使用的是哪个版本的kafka。请看一下:https://kafka.apache.org/documentation.html#basic_ops_cluster_expansionhttps://kafka.apache.org/documentation.html#basic_ops_decommissioning_brokers您需要使用kafka-reassign-partitions.sh工具来实现这一点。首先在非生产环境中测试。
mnemlml82#
我建议你用Kafka制镜机。看一看https://cwiki.apache.org/confluence/pages/viewpage.action?pageid=27846330 或者https://kafka.apache.org/documentation.html#basic_ops_mirror_maker基本上你是这样运行的:
cp /usr/lib/kafka/config/consumer.properties oldCluster.consumer.properties cp /usr/lib/kafka/config/producer.properties newCluster.producer.properties
而不是设置旧的群集,例如:
bootstrap.servers=clusterOldServer1.full.name:9092 auto.offset.reset=earliest # zookeeper.connect=commentedOutZookeeperForOlderKafka
然后运行migrate命令,该命令将作为“daemon”运行:
time kafka-run-class kafka.tools.MirrorMaker --consumer.config oldCluster.consumer.properties --producer.config newCluster.producer.properties --whitelist="topic.*regexp"
2条答案
按热度按时间2nbm6dog1#
假设新服务器和旧服务器一起生活在同一个数据中心中,最简单的方法是为所有现有分区添加新服务器作为副本。Kafka将使他们同步成为ISR。如果它们是同步的,您应该能够安全地关闭旧节点。
这当然取决于你的消费者是如何配置的(他们会自动找到新的节点吗?)以及你使用的是哪个版本的kafka。
请看一下:
https://kafka.apache.org/documentation.html#basic_ops_cluster_expansion
https://kafka.apache.org/documentation.html#basic_ops_decommissioning_brokers
您需要使用kafka-reassign-partitions.sh工具来实现这一点。首先在非生产环境中测试。
mnemlml82#
我建议你用Kafka制镜机。看一看https://cwiki.apache.org/confluence/pages/viewpage.action?pageid=27846330 或者https://kafka.apache.org/documentation.html#basic_ops_mirror_maker
基本上你是这样运行的:
而不是设置旧的群集,例如:
然后运行migrate命令,该命令将作为“daemon”运行: