[英]How to move a topic from one broker to another broker in kafka?
我首先嘗試查看是否可以在特定代理中創建主題。 但看起來這是不可能的。 即使我在引導程序中提到代理主機
admin_client = AdminClient({
"bootstrap.servers": "xxx1.com:9092,xxx2.com:9092"
})
futmap=admin_client.create_topics(topic_list)
該程序任意挑選我擁有的 5 個代理之一作為該主題的領導代理。 我試圖理解為什么會這樣。
我也在嘗試查看是否可以將主題負責人重新分配給另一個經紀人。 我知道可以通過 kafka-reassign-partitions 命令行腳本來實現,但我想使用 python 和 confluent-Kafka package 以編程方式進行。 是否可以以編程方式執行此操作。 我在 confluent-Kafka package 的 ADMIN class 中沒有找到重新分配分區 function
謝謝
我終於找到了解決方案,融合的 Kafka python package 的文檔不足以解決這個問題。 但是開源的一件好事是你可以閱讀代碼並弄清楚。 因此,要在特定代理中創建主題,我必須編寫創建主題代碼,如下所示。 請注意,我使用的是replica_assignment 而不是replication_factor。 這兩者是互斥的。 如果使用replication_factor,分區將由Kafka分配,您可以通過replica_assignment控制分配。 但是,我確信在重新平衡/重新分配分區的情況下,這將被重新分配。 但這也可以通過 on_revoke 事件來處理。 但就目前而言,這對我有用。
def createTopic(admin_client,topics):
#topic_name=topics
topic_name = ['rajib1_test_xxx_topic']
replica_assignment = [[262, 261]]
topic_list = [NewTopic(topic, num_partitions=1, replica_assignment=replica_assignment) for topic in topic_name]
futmap=admin_client.create_topics(topic_list)
# Wait for each operation to finish.
for topic, f in futmap.items():
try:
f.result() # The result itself is None
print("Topic {} created".format(topic))
except Exception as e:
print("Failed to create topic {}: {}".format(topic, e))
#return futmap
您還可以使用 Kafka 附帶的kafka-reassign-partitions.sh
工具將一個主題的副本更改為另一個代理。
例如,如果你想讓你的(在這個例子中是單復制和單分區的)主題“test”位於代理“1”上,你可以首先定義一個計划(命名為 replicachange.json):
{
"partitions":
[{"topic": "test", "partition": 0,
"replicas": [
1
]
}],
"version":1
}
然后使用執行它:
kafka-reassign-partitions.sh --zookeeper localhost:2181 --execute \
--reassignment-json-file replicachange.json
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.