当其中一个经纪人倒闭时,向Kafka发送消息是否安全?

时间:2016-03-28 23:26:56

标签: apache-kafka

我的公司一直在三节点集群上运行Kafka。让我们称节点为master,slave1,slave2。

所有三个节点都在运行Kafka。

但是,我发现I / O在主代理上的挂载分区(/mnt/)中搞砸了,甚至根也无法读取,写入或执行那里的任何文件。很奇怪Kafka还在运行。

其他两位经纪人都很好,但我认为其中只有一位经纪人正在运作。

我想替换主服务器上损坏的磁盘,然后在主服务器上重新启用Kafka。

根据我的理解,当我杀死卡夫卡的主人时,其中一个追随者会选择自己作为领导者,它应该可以正常工作。

我担心的是,

  1. 当Kafka关闭时保持向主服务器发送消息可能会使主服务器陷入困境。 (我通过消费者中所有三个经纪人的逗号分隔列表,但我需要确保它是安全的)

  2. 群集可能配置不当,因此它不是三节点群集,而实际上是三个单节点群集,而且不会容错。

    例如,在slave 1上,

    $ bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic metric.topic Topic:metric.topic PartitionCount:1 ReplicationFactor:1 Configs: Topic: metric.topic Partition: 0 Leader: 1 Replicas: 1 Isr: 1

    on slave 2,

    Topic:metric.topic PartitionCount:1 ReplicationFactor:1 Configs: Topic: metric.topic Partition: 0 Leader: 2 Replicas: 2 Isr: 2

    (我无法检查这是否为主,因为I / O权限在那里搞砸了)

    这两个似乎是单独运行的,尽管它们从生产者那里收到相同的消息。

  3. 我怎样才能确保这两件事不会发生?

    特别是,在Kafka文档中他们解决了我的问题#1? (Kafka文档更可取,因为我需要说服我公司的工程师这是安全的,否则我们将不得不禁用kafka生产商一天,我们将在那一天丢失任何日志。)

1 个答案:

答案 0 :(得分:2)

Kafka的架构没有主/从关系。主题的分区具有处理该分区的领导者代理。您可以在kafka-topics输出中看到" Partition 0"有一个领导者"领导者:1"。

你可以在你的kafka-topics输出中看到你对#2的直觉是正确的。这是两个截然不同的主题,"奴隶1"有一个主题与复制1和"奴隶2"有一个复制主题2.这意味着这两个代理不属于同一个集群。

我很困惑"(我通过消费者中所有三个经纪人的逗号分隔列表,但我需要确保它是安全的)"因为消费者不需要了解经纪人,而是了解动物园管理员。

所以回答你的问题:

1) 基于kafka-topics的输出,它看起来像" master"和"奴隶2"在集群中。这意味着你可以放下" master"和"奴隶2"将被选为新领导人。 (我认为奴隶2是现在的领导者,基于"领导者:2",虽然这取决于你给经纪人的东西)。当"掌握"回来后,数据将被复制到他,直到他同步,然后他将成为ISR集的一部分。

  

对于复制因子为N的主题,我们将容忍最多N-1个服务器故障,而不会丢失任何提交给日志的消息。 (来自http://kafka.apache.org/documentation.html

2)"奴隶2" host有一个复制因子为2的主题,为了实现这一点,集群中必须至少有2个代理。这让我相信"奴隶1"未正确配置且不属于群集。