0

帮助我了解 kafka 是如何工作的。我有 3 个具有此配置的 kafka 经纪人:

broker.id=1
listeners=PLAINTEXT://1.2.3.4:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=105906176
message.max.bytes=105906176
replica.fetch.max.bytes=105906176
log.dirs=/opt/kafka_2.12-2.1.0/logs
num.partitions=10
num.recovery.threads.per.data.dir=10
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=2
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=600000
zookeeper.connect=1.2.3.4:2181,5.6.7.8:2181,3.1.2.1:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=3
auto.create.topics.enable=false
delete.topic.enable=true
replica.fetch.wait.max.ms=500
replica.lag.time.max.ms=10000
request.timeout.ms=305000

在我重新启动所有代理后,同时在 3 个代理中的 2 个中,我不断看到此错误:

kafka-server-start.sh [2448]:[2020-02-10 06:01:33,969] 错误 [KafkaApi-2] 活动代理的数量“0”不满足事务状态所需的复制因子“2”主题(通过“transaction.state.log.replication.factor”配置)。如果集群正在启动并且并非所有代理都已启动,则可以忽略此错误。(kafka.server.KafkaApis)

但是所有服务器都运行,所有 kafka 服务启动,所有 zookeeper 启动(echo stat | nc zookeeper_ip 2181- 显示一切正常)。为什么卡夫卡说 - 活着的经纪人人数“0”?

在一位经纪人那里,我没有看到任何错误。当我重新启动没有此错误的 kafka 代理(只是重新启动服务 kafka,而不是所有服务器)时 - kafka 集群开始工作。所有 kafka 代理相互连接,启动复制分区,一切正常。为什么会发生这种情况?为什么重启后kafka经纪人看不到对方?可能是当我们使用 3 个 kafka 代理时,我们不能同时重启所有这些代理?

4

2 回答 2

0

在 Kafka 系统中,Zookeeper 负责维护所有可用代理的列表,如果控制器(代理之一)崩溃,则 Zookeeper 负责为集群选择一个新的控制器。

同时,如果所有的brokers同时重启,Zookeeper将无法选举Controller,因此不会有其他存活brokers的信息。

一旦您同时重新启动所有代理,第一个代理将被选为控制器,而其余代理仍然不知道其他可用代理。

因此,在重新启动 Kafka 时,最初它会抛出这样一个可以忽略的错误。

于 2020-02-10T07:49:44.750 回答
0

你错过了这部分信息吗?

如果集群正在启动并且并非所有代理都已启动,则可以忽略此错误。

不,您不应该同时重新启动它们。

为什么卡夫卡说 - 活着的经纪人人数“0”?

因为控制器可能还没有被选举出来

您应该弄清楚哪个是控制器代理,然后最后重新启动,然后滚动重新启动其余部分

如果您的代理多于副本并启用了机架感知,那么您一次可以使用多个代理

于 2020-02-10T07:00:34.570 回答