使kafka代理关闭时,ctrl-c和kill -9有什么不同

What's the different between ctrl-c and kill -9 when making kafka broker down

我正在看kafka官方教程,在multibroker部分遇到了一个奇怪的问题。

我简单列出一下我做过的事情:

那我想测试一下kafka的容错能力。我使用 ctrl-c 来终止主题的领导者,而不是按预期正常工作的 kill -9 。问题是:

我无法使用来自 kafka 的任何消息。

怎么了?

p.s。我使用的命令和上面的教程完全一样
卡夫卡 1.00

--已更新 以下是部分关键输出:

 bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic   PartitionCount:1    ReplicationFactor:3 Configs:
    Topic: my-replicated-topic  Partition: 0    Leader: 0   Replicas: 0,1,2 Isr: 1,0,2

然后我 ctrl-c 杀死代理 0:

 bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic   PartitionCount:1    ReplicationFactor:3 Configs:
    Topic: my-replicated-topic  Partition: 0    Leader: 1   Replicas: 0,1,2 Isr: 1,2

此时我无法从其他经纪商消费

bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9093 --from-beginning --topic my-replicated-topic

这是broker 0的配置,除了broker id、端口和日志目录外,其他配置与此相同。

broker.id=0
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

你的 offsets.topic.replication.factor=1 因此,如果你用消费者的偏移量杀死代理,则没有其他副本,因此你没有偏移量。

在您的 __consumer_offsets 主题上设置复制因子 = 1 不是容错配置

您不仅需要更改此配置,而且还必须将现有的消费者偏移主题修改为复制因子 = 3

通过 Ctrl+C 退出进程与通过 kill -9 终止进程是有区别的。 kill -9会发送SIGKILL信号杀死进程,进程无法避免,因此Ctrl+C,相当于kill -3会发送信号SIGQUIT],可以由进程处理或忽略。