如何更改Kafka主题的副本数量?

Gur*_*uPo 57 apache-kafka

在生产者或管理员创建了Kafka主题之后,您将如何更改此主题的副本数量?

Łuk*_*ski 108

要增加给定主题的副本数量,您必须:

1.在自定义重新分配json文件中指定额外副本

例如,您可以创建increase-replication-factor.json并将此内容放入其中:

{"version":1,
  "partitions":[
     {"topic":"signals","partition":0,"replicas":[0,1,2]},
     {"topic":"signals","partition":1,"replicas":[0,1,2]},
     {"topic":"signals","partition":2,"replicas":[0,1,2]}
]}
Run Code Online (Sandbox Code Playgroud)

2.使用带有kafka-reassign-partitions工具的--execute选项的文件

[或kafka-reassign-partitions.sh - 取决于kafka包]

例如:

$ kafka-reassign-partitions --zookeeper localhost:2181 --reassignment-json-file increase-replication-factor.json --execute
Run Code Online (Sandbox Code Playgroud)

3.使用kafka-topics工具验证复制因子

[或kafka-topics.sh - 取决于kafka包]

 $ kafka-topics --zookeeper localhost:2181 --topic signals --describe

Topic:signals   PartitionCount:3    ReplicationFactor:3 Configs:retention.ms=1000000000
Topic: signals  Partition: 0    Leader: 2   Replicas: 0,1,2 Isr: 2,0,1
Topic: signals  Partition: 1    Leader: 2   Replicas: 0,1,2 Isr: 2,0,1
Topic: signals  Partition: 2    Leader: 2   Replicas: 0,1,2 Isr: 2,0,1
Run Code Online (Sandbox Code Playgroud)

另请参阅:官方文档中描述如何增加复制因子的部分.

  • Kafka-reassign-partitions可以通过指定** - generate**和** - topics-to-move-json-file**来生成对分区重新分配的建议,但是文档没有很好地解释内容: `{"主题":[{"主题":"YOUR_TOPIC_NAME_1"},{"主题":"YOUR_TOPIC_NAME_2"}],"版本":1}`该命令看起来像`kafka-reassign-partitions.sh - zookeeper#.#.#.#:2181,#.#.#.#:2181,#.#.#.#:2181 --broker-list#,#,# - topic-to-move-json- file reassignment.topics.json --generate` (6认同)
  • 第 2 步`kafka-reassign-partitions` 会导致停机吗?我有一些复制因子为 1 的主题(默认,创建时忘记指定),我想知道我的生产者在重新分配分区时是否会出错。 (2认同)

Dir*_*irk 26

您还可以使用kafkactl来实现此目的:

\n
# first run with --validate-only to see what kafkactl will do\nkafkactl alter topic my-topic --replication-factor 2 --validate-only\n\n# then do the replica reassignment\nkafkactl alter topic my-topic --replication-factor 2\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,kafkactl 为此使用的 Kafka API 仅适用于 Kafka \xe2\x89\xa5 2.4.0。

\n

免责声明:我是该项目的贡献者

\n


Art*_*ski 12

编辑:我被证明是错的 - 请检查lukdumi的优秀答案.

我暂时离开原来的完整答案.

我认为你不能.通常它会是这样的

./kafka-topics.sh --zookeeper localhost:2181 --alter --topic test2 --rerelication-factor 3

但它说

选项"[replication-factor]"不能与选项"[alter]"一起使用

有趣的是,您可以动态更改分区数(在运行时完成时通常会产生极大的破坏性操作),但无法增加复制因子,这应该是透明的.但请记住,它是0.10,而不是10.0 ...请在此处查看增强请求https://issues.apache.org/jira/browse/KAFKA-1543


Ami*_*aki 7

?ukasz Dumiszewski 的回答是正确的,但手动生成该文件有点困难。幸运的是,有一些简单的方法可以实现@?ukasz Dumiszewski 所说的。

  • 如果您使用的是kafka-manager tool,则可以从版本2.0.0.2中更改Generate Partition Assignment主题视图中部分中的复制因子。然后您应该单击Reassign Partitions应用生成的分区分配(如果您选择不同的复制因子,您将收到警告,但您可以在Force Reassign之后单击)。

  • 如果你安装了 ruby​​,你可以使用这个帮助脚本

  • 如果您更喜欢 nodejs,您也可以使用要点生成文件。