首页 > 其他分享 >Kafka-合理设置broker、partition、consumer数量

Kafka-合理设置broker、partition、consumer数量

时间:2023-11-23 15:44:37浏览次数:33  
标签:Partition partition Broker broker 消费 Kafka 数量

 1.broker的数量最好大于等于partition数量

一个partition最好对应一个硬盘,这样能最大限度发挥顺序写的优势。

一个broker如果对应多个partition,需要随机分发,顺序IO会退化成随机IO。

实验条件:3个 Broker,1个 Topic,无Replication,异步模式,3个 Producer,消息 Payload 为100字节:

场景1:partition数量 < Broker个数

当 Partition 数量小于 Broker个数时,Partition 数量越大,吞吐率越高,且呈线性提升。

Kafka 会将所有 Partition 均匀分布到所有Broker 上,所以当只有2个 Partition 时,会有2个 Broker 为该 Topic 服务。
3个 Partition 时,同理会有3个 Broker 为该 Topic 服务。

场景2:partition数量 > Broker个数

当 Partition 数量多于 Broker 个数时,总吞吐量并未有所提升,甚至还有所下降。

可能的原因是,当 Partition 数量为4和5时,不同 Broker 上的 Partition 数量不同,而 Producer 会将数据均匀发送到各 Partition 上,这就造成各Broker 的负载不同,不能最大化集群吞吐量。

总结:

• 当broker数量大于partition数量,则有些broker空闲,此时增加partition会带来性能提升。而且是线性增长。
• 当两者相等,则所有broker都启用,吞吐达到瓶颈。
• 继续增加,则broker会不均衡,有点会分到更多的partition。
顺序IO退化成随机IO。

2.consumer数量最好和partition数量一致

场景1:consumer数量 < partition数量

假设有一个 T1 主题,该主题有 4 个分区;同时我们有一个消费组 G1,这个消费组只有一个消费者 C1。
那么消费者 C1 将会收到这 4 个分区的消息。

如果我们增加新的消费者 C2 到消费组 G1,那么每个消费者将会分别收到两个分区的消息。

相当于 T1 Topic 内的 Partition 均分给了 G1 消费的所有消费者,在这里 C1 消费 P0 和 P2,C2 消费 P1 和 P3。

场景2:consumer数量 = partition数量

如果增加到 4 个消费者,那么每个消费者将会分别收到一个分区的消息。 这时候每个消费者都处理其中一个分区,满负载运行。

场景3:consumer数量 > partition数量

但如果我们继续增加消费者到这个消费组,剩余的消费者将会空闲,不会收到任何消息。

总而言之,我们可以通过增加消费组的消费者来进行水平扩展提升消费能力。

这也是为什么建议创建主题时使用比较多的分区数,这样可以在消费负载高的情况下增加消费者来提升性能。

另外,消费者的数量不应该比分区数多,因为多出来的消费者是空闲的,没有任何帮助。

如果我们的 C1 处理消息仍然还有瓶颈,我们如何优化和处理?

把 C1 内部的消息进行二次 sharding,开启多个 goroutine worker 进行消费,为了保障 offset 提交的正确性,需要使用 watermark 机制,保障最小的 offset 保存,才能往 Broker 提交。

保证顺序性,避免大的offest先提交,小的offest挂了,重启后会消息丢失。
解决:开一个协程专门提交offest,保证只提交最小的,重复消费代替消息丢失。

场景4:添加consumer group支持多个应用消费partition的数据

 

Kafka 一个很重要的特性就是,只需写入一次消息,可以支持任意多的应用读取这个消息。 换句话说,每个应用都可以读到全量的消息。为了使得每个应用都能读到全量消息,应用需要有不同的消费组。

对于上面的例子,假如我们新增了一个新的消费组 G2,而这个消费组有两个消费者如图。 在这个场景中,消费组 G1 和消费组 G2 都能收到 T1 主题的全量消息,在逻辑意义上来说它们属于不同的应用。

3.总结

如果应用需要读取全量消息,那么请为该应用设置一个消费组;如果该应用消费能力不足,那么可以考虑在这个消费组里增加消费者。

1)broker的数量最好大于等于partition数量

2)consumer数量最好和partition数量一致

标签:Partition,partition,Broker,broker,消费,Kafka,数量
From: https://www.cnblogs.com/yeyuzhuanjia/p/17851693.html

相关文章

  • Kafka 配置部署及SASL_PLAINTEXT安全认证
    1、下载安装Kafka下载地址:ApacheKafka#下载文件wgethttps://downloads.apache.org/kafka/3.5.1/kafka_2.12-3.5.1.tgz#文件解压缩tar-zxvfkafka_2.12-3.5.1.tgz#修改目录名称mvkafka_2.12-3.5.1kafka_2.12#进入目录cdkafka_2.122、Zookeeper 配置2.......
  • 实例讲解:NodeJS 操作 Kafka
    本人是C#出身的程序员,c#很简单就能实现,有需要的可以加我私聊。但是就目前流行的开发语言,尤其是面向web方向应用的,我感觉就是Nodejs最简单了。下面介绍:本文将会介绍在windows环境下启动Kafka,并通过nodejs作为客户端,生产和消费消息。步骤一,Kafka需要java运行时,先安装配置java环境。下......
  • CreatePartition API执行流程_milvus源码解析(2)
    CreatePartitionAPI执行流程源码解析milvus版本:v2.3.2syncNewCreatedPartitionStep_milvus源码解析整体架构:CreatePartition的数据流向:1.客户端sdk发出CreatePartitionAPI请求。frompymilvusimport(connections,Collection,Partition,)print("star......
  • centos7安装Kafka
    参考:https://blog.csdn.net/yang1393214887/article/details/1234257151.官网下载https://kafka.apache.org/downloadshttps://dlcdn.apache.org/kafka/3.1.0/kafka_2.12-3.1.0.tgz2.上传到centos7/data/kafka/目录,解压到此目录pwd#当前文件位置mv/home/sili/kafka_2.12-......
  • strimzi operator 部署kafka集群
    环境说明本环境使用了单节点、临时存储集群的kafka-ephemeral-single配置。线上环境推荐kafka-persistent.yaml配置并修改storage配置为自动创建pv/pvc类型。配置清单说明1.kafka-ephemeral-single.yaml:非持久化存储,单节点集群;2.kafka-ephemeral.yaml:非持久化存储,多节点集群......
  • Kafka异常——The coordinator is not available
    之前架设了一个Kafka集群,跑了很久没有什么错误,最近开发的小伙伴跟我说部分kafka不能消费了,了解详细情况后,自己也赶紧作了个测试,发现是有报错...Causedby:rg.apache.kafka.common.errors.CoordinatorNotAvailableException:Thecoordinatorisnotavailable....报错在网上......
  • kafka
    kafka下载路径:(https://kafka.apache.org/downloads)一、kafka单机安装1.1上传jdk环境jdk-8u202-linux-x64.tar.gzkafka_2.12-3.5.1.tgz1.2解压安装包tarxfjdk-8u202-linux-x64.tar.gz-C/usr/local/cd/usr/local/mvjdk1.8.0_202/java1.3编写环境变量文......
  • CreatePartition API执行流程_milvus源码解析
    CreatePartitionAPI执行流程源码解析milvus版本:v2.3.2整体架构:CreatePartition的数据流向:1.客户端sdk发出CreatePartitionAPI请求。frompymilvusimport(connections,Collection,Partition,)print("startconnectingtoMilvus")connections.connec......
  • 刷机 pixel3 xl 报错,remote: 'Could not open super partition'解决。
    问题一:PartitionshouldbeflashedinfastbootdFAILED(remote:Partitionshouldbeflashedinfastbootd)解决:升级到fastbootversion34.0.5-10900879版本后发现可以使用。(建议升级至fastbootversion33.0.1-8253317)但是遇到了问题二:问题二:Couldnotopensuperpart......
  • nanomq 轻量快速的mqtt broker
    nanomq是emqx团队开源的iot边缘mqttbroker,有点是轻量,性能好,同时官方也提供了与Mosquitto对比的介绍nanomq很多功能上与emqx是类似的,包含了rule,自定义auth,gatway协议,基于关系型数据库的存储一张官方的集成玩法一些特点快速 相比mosquitto有10倍的提升轻量 比较小跨......