kafka分区数量设置多少合适(kafka 分区个数与集群大小的关系)

技术如何为Kafka集群确定合适的分区数以及分区数过多带来的弊端如何为Kafka集群确定合适的分区数以及分区数过多带来的弊端,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到

如何为Kafka集群确定合适的分区数量以及分区过多带来的弊端,针对这个问题,本文详细介绍了相应的分析和解决方法,希望能帮助更多想要解决这个问题的小伙伴找到更简单更容易的方法。

卡夫卡高吞吐量的原因之一是主题中的消息通过分区保存到卡夫卡集群中的不同代理。卡夫卡的生产者和消费者都可以在主题中并发操作分区,所以分区是卡夫卡并行性调优的最小单位。

理论上,如果有更多的主题分区,理论上整个集群的吞吐量会更大。

但是,在实际生产中,卡夫卡话题的分区越多越好,这是真的吗?显然不是!

过多的分区会有以下缺点:

一、客户端/服务器端需要使用的内存就越多

在Kafka0.8.2之后,客户端生成器中有一个参数batch.size,默认为16KB。它为每个分区缓存消息。当数据累积到一定的大小或足够的时间时,累积的消息将从缓存中删除并发送到代理节点。此功能旨在提高性能,但随着分区数量的增加,这部分缓存将需要更多内存。

同时,消费者在消费消息时占用的内存和为获得更高吞吐量性能而打开的消费者线程数量也会随着分区数量的增加而增加。例如,如果有10,000个分区,并且消费者线程的数量应该与分区的数量相匹配(这在大多数情况下是最佳的消费吞吐量配置),那么将在消费者客户端中创建10,000个线程,然后在消费者客户端中创建10,000个线程,并且将创建大约10,000个Socket来获取分区数据。线程的开销成本显然不容小觑!

此外,服务器端开销也不小。如果你阅读卡夫卡的源代码,你会发现服务器端的很多组件都在内存中维护分区级的缓存,比如控制器、FetcherManager等。因此分区越多,该缓存的成本就越大。二、文件句柄的开销

在Kafka的代理中,每个分区对应于磁盘文件系统的一个目录。在Kafka的数据日志文件目录中,两个文件,一个索引文件和一个数据文件被分配给每个日志数据段。在kafka的当前版本中,每个代理将为每个日志段文件打开一个索引文件句柄和一个数据文件句柄。因此,随着分区的增加,需要保持打开的文件句柄数量也会增加,最终可能会超过底层操作系统配置的文件句柄限制。三、越多的分区可能增加端对端的延迟

Kafka端到端延迟定义为生产者发布消息到消费者收到消息所需的时间,即消费者收到消息的时间减去生产者发布消息的时间。

Kafka只会在消息提交后才会向消费者公开消息。例如,在同步所有同步副本列表之前,该消息不会公开。因此,花在同步复制上的时间将是卡夫卡端到端延迟中最重要的部分。默认情况下,当每个代理从其他代理节点复制数据时,代理节点将只为此作业分配一个线程,该线程需要完成代理的所有分区数据的复制。

请注意,上述问题可以通过增加kafka集群来缓解。例如,如果在一个代理节点和10个代理节点中放置1000个分区领导者,则它们之间的延迟是不同的。在10个代理节点的集群中,每个代理节点平均需要处理100个分区的数据复制。此时,端到端延迟将从几十毫秒变为几毫秒。

根据经验,如果你非常关心消息延迟,那么限制每个代理节点的分区数量是一个好主意:对于b代理节点和复制因子为R的kafka集群,整个kafka集群的分区数量不应该超过100*b*r,即单个分区的leader数量不应该超过100。四、降低高可用性

Kafka通过多副本复制技术实现了Kafka集群的高可用性和稳定性。每个分区都有多个数据副本,每个副本都存在于不同的代理中。在的所有数据副本中,一个数据副本是领导者,其他数据副本是追随者。

在Kafka集群中,所有数据副本都以自动化方式进行管理,所有数据副本的数据保持同步。无论生产者还是消费者对分区的请求,都是由leader的数据副本所在的代理处理的。当经纪人失败时,领导者的数据副本存储在经纪人办公室。

有partition将会变得暂时不可用。Kafka将会自动在其它数据副本中选择出一个leader,用于接收客户端的请求。这个过程由Kafka controller节点broker自动完成,主要是从Zookeeper读取和修改受影响partition的一些元数据信息。

在通常情况下,当一个broker有计划地停止服务时,那么controller会在服务停止之前,将该broker上的所有leader一个个地移走。由于单个leader的移动时间大约只需要花费几毫秒,因此从客户层面看,有计划的服务停机只会导致系统在很小时间窗口中不可用。(注:在有计划地停机时,系统每一个时间窗口只会转移一个leader,其他leader皆处于可用状态。)

然而,当broker非计划地停止服务时(例如,kill -9方式),系统的不可用时间窗口将会与受影响的partition数量有关。假如,一个2节点的kafka集群中存在2000个partition,每个partition拥有2个数据副本。当其中一个broker非计划地宕机,所有1000个partition同时变得不可用。假设每一个partition恢复时间是5ms,那么1000个partition的恢复时间将会花费5秒钟。因此,在这种情况下,用户将会观察到系统存在5秒钟的不可用时间窗口。

而如果发生宕机的broker恰好是controller节点时:在这种情况下,新leader节点的选举过程在controller节点恢复到新的broker之前不会启动。controller节点的错误恢复将会自动地进行,但是新的controller节点需要从zookeeper中读取每一个partition的元数据信息用于初始化数据。例如,假设一个Kafka集群存在10000个partition,从zookeeper中恢复元数据时每个partition大约花费2ms,则controller的恢复将会增加约20秒的不可用时间窗口。

总而言之,通常情况下Kafka集群中越多的partition会带来越高的吞吐量。但是,如果Kafka集群中partition总量过大或者单个broker节点partition过多,都可能会对系统的可用性和消息延迟带来潜在的负面影响,需要引起我们的重视。

那么如何确定合理的分区数量呢?
 

在partition级别上达到均衡负载是实现吞吐量的关键,合适的partition数量可以达到高度并行读写和负载均衡的目的,需要根据每个分区的生产者和消费者的目标吞吐量进行估计。

可以遵循一定的步骤来确定分区数:根据某个topic日常"接收"的数据量等经验确定分区的初始值,然后测试这个topic的producer吞吐量和consumer吞吐量。假设它们的值分别是Tp和Tc,单位可以是MB/s。然后假设总的目标吞吐量是Tt,那么numPartitions = Tt / max(Tp, Tc)

说明:Tp表示producer的吞吐量。测试producer通常是很容易的,因为它的逻辑非常简单,就是直接发送消息到Kafka就好了。Tc表示consumer的吞吐量。测试Tc通常与应用消费消息后进行什么处理的关系更大,相对复杂一些。

关于如何为Kafka集群确定合适的分区数以及分区数过多带来的弊端问题的解答就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/146808.html

(0)

相关推荐

  • 避免,自媒体视频如何避免侵权

    技术避免,自媒体视频如何避免侵权首先要对于我们自媒体来说,侵权的范围一般来说就是三类避免:视频类,图片类,字体配乐类。独角shou就因为字体侵权被索赔十几万,损失惨重。不过知名度不高的账号的话,一般不会收到音乐字体类的侵

    生活 2021年10月21日
  • 容斥问题公式,详细解释一下3个以上的容斥定理

    技术容斥问题公式,详细解释一下3个以上的容斥定理这是摩根公式 和 容斥定理 (A交B)的补==(A的补)并(B的补)
    (A并B)的补==(A的补)交(B的补)
    补==取补集
    并==取并集
    交==取交集

    生活 2021年10月26日
  • mysql创建删除索引(mysql中如何删除索引)

    技术mysql如何删除index索引小编给大家分享一下mysql如何删除index索引,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    攻略 2021年12月21日
  • 如何深入理解Java虚拟机JVM类加载初始化

    技术如何深入理解Java虚拟机JVM类加载初始化如何深入理解Java虚拟机JVM类加载初始化,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1

    2021年11月21日
  • 【Trie】最大异或对

    技术【Trie】最大异或对 【Trie】最大异或对【题目描述】
    在给定的N个整数A1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少
    输入格式
    第一行输入一个整数N。
    第二行输入N个

    礼包 2021年10月20日
  • 面试官:你给我说一下线程池里面的几个锁吧。

    技术面试官:你给我说一下线程池里面的几个锁吧。 面试官:你给我说一下线程池里面的几个锁吧。你好呀,我是歪歪。
    最近有个读者给我说,面试聊到线程池的时候,相谈甚欢,基本都回答上来了,但是其中有一个问题直接

    礼包 2021年11月1日