有关Kafka群集设置的疑问

时间:2018-12-07 06:22:19

标签: apache-kafka

我有一个用例,我想在一开始就设置一个Kafka集群,我有1个Kafka Broker(A)和1个Zookeeper节点。所以下面提到的是我的查询:

  • 向群集添加新的Kafka Broker(B)时。经纪人A上存在的所有数据都会自动分发吗?如果不是,我需要分发数据。

  • 我们不以为然吧!解决了,我的数据已分发到两个代理上。现在由于某些维护问题,我想拆除服务器B。

    • 如何将Broker B的数据传输到现有的Broker A或新的Broker C。
  • 如何在运行时增加代理的复制因子

  • 如何在运行时更改Kafka Broker Config中存在的zookeeper IP,而无需重新启动Kafka?

  • 如何在运行时动态更改Kafka配置

关于Kafka客户端:

  • 是否需要将所有Kafka代理IP指定给kafkaClient进行连接? 而且每次添加或删除代理时,我都需要在Kafka Client连接字符串中添加或删除我的IP。是否总是需要重启我的生产者和消费者?

注意:

Kafka Version: 2.0.0
Zookeeper: 3.4.9
Broker Size : (2 core, 8 GB RAM) [4GB for Kafka and 4 GB for OS]

2 个答案:

答案 0 :(得分:1)

要从单个kafka代理运行主题,则在创建该主题时(显式或通过default.replication.factor隐式设置),必须将复制因子设置为1。这意味着即使增加代理的数量,主题的分区也将位于单个代理上。

您必须按照kafka文档中的说明increase the number of replicas。您还必须注意internal __consumer_offsets topic has enough replicas。这将开始复制过程,最终原始代理将成为每个主题分区的领导者,而另一个代理将成为追随者并被完全追赶。您可以使用kafka-topics.sh --describe来检查每个分区在ISR(同步副本)中是否都有两个代理。

完成后,您应该可以使原始代理脱机,并且kafka将选出新代理为每个主题分区的负责人。不要忘记更新客户端,以便他们也知道新的代理,以防客户端在原始代理关闭时需要重新启动(否则找不到群集)。

答案 1 :(得分:0)

以下是简要答案:

  • 是的,经纪人A上的数据也将在Kafka经纪人B中分发

  • 您可以设置三个代理A,B和C,因此,如果A失败,则B和C将会失败;如果B失败,则C将接任等等。

  • 您可以增加代理的复制因子 您可以创建cremental-replication-factor.json并将其放入其中:

    {“版本”:1,   “分区”:[      {“ topic”:“信号”,“分区”:0,“副本”:[0,1,2]},      {“ topic”:“信号”,“分区”:1,“副本”:[0,1,2]},      {“主题”:“信号”,“分区”:2,“副本”:[0,1,2]} ]}

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

使用以下命令指定现有主题的额外分区(让我们说从2增加到3)

bin/kafktopics.sh --zookeeper localhost:2181 --alter --topic topic-to-increase --partitions 3

有zoo.cfg文件,您可以在其中添加与ZooKeeper相关的IP和配置。