目前最大规模的生产kafka集群部署

时间:2019-05-08 04:45:38

标签: apache-kafka

我正在考虑如何部署我们的kafka集群:一个具有多个代理组或多个集群的大型集群。如果是大型集群,我想知道kafka集群可以有多大。 kafka有一个控制器节点,我不知道它可以支持多少经纪人。另一个是_consume_offset_主题,它可以有多大,我们可以为其添加更多分区。

2 个答案:

答案 0 :(得分:0)

我亲自与生产Kafka集群合作,从3个经纪人到20个经纪人。他们都工作得很好,这仅取决于您要承担的工作量。对于Kafka,我的一般建议是,拥有少量的大型/功能强大的代理比拥有一堆微型服务器更好。

对于固定群集,您添加的每个代理都增加了节点之间的“串扰”,因为它们必须四处移动分区,复制数据以及保持元数据同步。这种额外的网络干扰可能会影响代理可以处理的负载量。通常,添加代理将增加整体容量,但是您必须移动分区,以便在整个集群中正确平衡负载。因此,最好从10个节点开始,这样从一开始就均匀分布主题和分区,而不是从6个节点开始然后再添加4个节点。

不管集群的大小如何,一次始终只有一个控制器节点。如果该节点发生故障,则另一个节点将接任控制器,但假设集群未处于不稳定状态,则在给定时间只能有一个处于活动状态。

__consumer_offsets主题可以具有任意数量的分区,但是默认情况下它设置为50个分区。由于这是一个紧凑的主题,假设没有发生过多的提交(这在生产环境中已经发生过两次),那么默认设置对于几乎所有情况都应该足够了。您可以通过在Kafka官方文档中查找以offsets.开头的代理属性来查找消费者抵消主题的配置设置。

您可以在Kafka官方文档页面上获得更多详细信息:https://kafka.apache.org/documentation/

答案 1 :(得分:0)

群集的大小可以通过以下方式确定。

对用例进行建模的最准确方法是在自己的硬件上模拟预期的负载。可以使用kafka load generation tools kafka-producer-perf-testkafka-consumer-perf-test

根据生产者和消费者指标,我们可以决定集群的代理数量。

另一种方法是不进行模拟,这是基于获得所需数据保留期的数据的估计速率进行的。

我们还可以计算吞吐量,并以此为基础确定集群中的代理数量。

示例

如果每秒有800条消息,每条消息500个字节,则吞吐量为800*500/(1024*1024) = ~0.4MB/s。现在,如果您的主题已分区并且您有3个代理并启动了3个副本,它们将导致0.4/3*3=0.4MB/s

有关该体系结构的更多详细信息,请访问confluent

在Kafka集群中,单个经纪人充当控制器。如果您有一个由100个经纪人组成的集群,那么其中一个将充当控制者。

如果我们在内部进行交谈,则每个代理都尝试在zookeeper(/ controller)中创建一个节点(临时节点)。第一个成为控制器。其他代理获得异常(“节点已存在”),他们在控制器上设置了监视。当控制器死亡时,临时节点将被删除,并通知监视代理进行控制器选择过程。

可以在here中找到控制器的功能。

__consumer_offset主题用于存储使用者提交的偏移量。它的默认值是50,但是可以为更多分区设置它。要进行更改,请设置offsets.topic.num.partitions属性。