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