我有一个用例,我想首先建立一个kafka集群,我有一个kafka代理(a)和一个zookeeper节点。下面是我的问题:
向集群添加新的kafka代理(b)。代理a上的所有数据都将自动分发吗?如果不是我需要做的分发数据。
不,让我们假设这个案子!我的数据被分发到两个代理上。现在由于一些维护问题,我想取下服务器b。
如何将代理b的数据传输到现有的代理a或新的代理c。
如何在运行时增加代理的复制因子
如何在运行时更改kafka代理配置中的zookeeper ip而不重新启动kafka?
如何在运行时动态更改kafka配置
关于Kafka客户:
我需要将所有kafka代理ip指定给kafkaclient进行连接吗?每次添加或删除代理时,我都需要在kafka客户机连接字符串中添加或删除我的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条答案
按热度按时间z4bn682m1#
要从单个kafka代理运行一个主题,在创建该主题时必须将复制因子设置为1(显式或隐式)
default.replication.factor
). 这意味着主题的分区将位于单个代理上,即使在增加代理的数量之后也是如此。您必须增加Kafka文档中描述的复制副本的数量。您还必须注意internal\uu consumer\u offset主题有足够的副本。这将启动复制过程,最终原始代理将成为每个主题分区的领导者,而另一个代理将成为追随者并完全赶上。你可以用
kafka-topics.sh --describe
检查每个分区在isr(同步副本)中是否都有两个代理。一旦这样做了,你应该可以让原来的代理离线,Kafka将选出新的代理作为每个主题分区的领导者。不要忘记更新客户机,以便他们也知道新的代理,以防客户机需要在原始代理关闭时重新启动(否则它将找不到集群)。
iyr7buue2#
以下是简单的答案:
是的,代理a上的数据也将在kafka代理b中分发
你可以设置三个代理a,b和c,所以如果a失败了,那么b和c会,如果b失败了,那么c会接管,以此类推。
您可以增加代理的复制因子您可以创建increase-replication-factor.json并将此内容放入其中:
{“版本”:1,“分区”:[{“主题”:“信号”,“分区”:0,“副本”:[0,1,2]},{“主题”:“信号”,“分区”:1,“副本”:[0,1,2]},{“主题”:“信号”,“分区”:2,“副本”:[0,1,2]}}
要增加给定主题的副本数,必须:
使用下面的命令指定现有主题的额外分区(假设从2增加到3)
这里有zoo.cfg文件,您可以在其中添加与zookeeper相关的ip和配置。