http://blog.csdn.net/greenappple/article/details/50933872

如何决定kafka集群中topic,partition的数量,这是许多kafka用户经常遇到的问题。本文列举阐述几个重要的决定因素,以提供一些参考。

分区多吞吐量更高

一个话题topic的各个分区partiton之间是并行的。在producer和broker方面,写不同的分区是完全并行的。因此一些昂贵的操作比如压缩,可以获得更多的资源,因为有多个进程。在consumer方面,一个分区的数据可以由一个consumer线程在拉去数据。分区多,并行的consumer(同一个消费组)也可以多。因此通常,分区越多吞吐量越高。

基于吞吐量可以获得一个粗略的计算公式。先测量得到在只有一个分区的情况下,Producer的吞吐量(P)和Consumer的吞吐量(C)。那如果总的目标吞吐量是T的话,max(T/P,T/C)就是需要的最小分区数。在单分区的情况下,Producer的吞吐量可以通过一些配置参数,比如bath的大小、副本的数量、压缩格式、ack类型来测得。而Consumer的吞吐量通常取决于应用程序处理每一天消息逻辑。这些都是需要切合实际测量。

随着时间推移数据量的增长可能会需要增加分区。有一点需要注意的是,Producer者发布消息通过key取哈希后映射分发到一个指定的分区,当分区数发生变化后,会带来key和分区映射关系发生变化。可能某些应用程序依赖key和分区映射关系,映射关系变化了,程序就需要做相应的调整。为了避免这种key和分区关系带来的应用程序修改。所以在分区的时候尽量提前考虑,未来一年或两年的对分区数据量的要求。

除了吞吐量,还有一些其他的因素,在定分区的数目时是值得考虑的。在某些情况下,太多的分区也可能会产生负面影响。

分区多需要的打开的文件句柄也多

每个分区都映射到broker上的一个目录,每个log片段都会有两个文件(一个是索引文件,另一个是实际的数据文件)。分区越多所需要的文件句柄也就越多,可以通过配置操作系统的参数增加打开文件句柄数。

分区多增加了不可用风险

kafka支持主备复制,具备更高的可用性和持久性。一个分区(partition)可以有多个副本,这些副本保存在不同的broker上。每个分区的副本中都会有一个作为Leader。当一个broker失败时,Leader在这台broker上的分区都会变得不可用,kafka会自动移除Leader,再其他副本中选一个作为新的Leader。Producer和Consumer都只会与Leader相连。

一般情况下,当一个broker被正常关机时,controller主动地将Leader从正在关机的broker上移除。移动一个Leader只需要几毫秒。然当broker出现异常导致关机时,不可用会与分区数成正比。假设一个boker上有2000个分区,每个分区有2个副本,那这样一个boker大约有1000个Leader,当boker异常宕机,会同时有1000个分区变得不可用。假设恢复一个分区需要5ms,1000个分区就要5s。

分区越多,在broker异常宕机的情况,恢复所需时间会越长,不可用风险会增加。

分区多会增加点到点的延迟

这个延迟需要体现在两个boker间主备数据同步。在默认情况下,两个boker只有一个线程负责数据的复制。

根据经验,每个boker上的分区限制在100*b*r内(b指集群内boker的数量,r指副本数量)。

分区多会增加客户端的内存消耗

kafka0.8.2后有个比较好的特色,新的Producer可以允许用户设置一个缓冲区,缓存一定量的数据。当缓冲区数据到达设定量或者到时间,数据会从缓存区删除发往broker。如果分区很多,每个分区都缓存一定量的数据量在缓冲区,很可能会占用大量的内存,甚至超过系统内存。

Consumer也存在同样的问题,会从每个分区拉一批数据回来,分区越多,所需内存也就越大。

根据经验,应该给每个分区分配至少几十KB的内存。

总结

在通常情况下,增加分区可以提供kafka集群的吞吐量。然而,也应该意识到集群的总分区数或是单台服务器上的分区数过多,会增加不可用及延迟的风险。

http://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/

如何查看kafka每个话题一共分了几个分区_如何决定kafka集群中话题的分区的数量...相关推荐

  1. kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition

    kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition 参考文章: (1)k ...

  2. 【Kafka】Kafka集群扩展以及重新分布分区-分区重新分配

    文章目录 1.概述 2.案例 2.1 分区重分布脚本 1.概述 本文转载:https://www.iteblog.com/archives/1611.html 并且补充说明 视频参考:https:// ...

  3. Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统

    阅读目录(Content) 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 1.2.数据块(data block)简介 1.3.对分布式文件系统中的块进行抽象会带来很多好处 二.Jav ...

  4. 【Kafka】测试集群中Broker故障对客户端的影响

    本文主要测试Kafka集群中Broker节点故障对客户端的影响. 集群信息:4个broker.topic:100+(每个topic30个partition).集群加密方式:plaintext.存储:c ...

  5. 【logstash】使用logstash拉取数据到kerberos+SSL认证的kafka集群中遇到的坑

    说明:我的是2个集群.集群A是不加密的kafka集群,集群B是Kerberos+SSL加密的集群.需求:需要使用 在测试过程中,我开始是把logstash安装在了集群A上,怎么测试都不通过.配置文件没 ...

  6. word文档分节符如何删除_如何在Word文档中查找分节符

    word文档分节符如何删除 Section breaks in Word allow you to break up your document into sections and format ea ...

  7. 另类--kafka集群中jmx端口设置

    # 监控kafka集群 # 有一个问题,需要在kafka-server-start.sh文件中配置端口,有如下三种办法 # 第一种:复制并修改kafka目录,比如kafka-1,kafka-2,kaf ...

  8. Linux部署 kafka集群

    目录 问题现象: 解决方法: 0.环境 环境: 1.下载 地址: 拓展:Scala是什么? 2.部署 2.1 linux服务器上新建目录 2.2 上传kafka压缩包到服务器 2.3 解压 2.4 重 ...

  9. ELK+Kafka集群日志分析系统

    因为是自己本地写好的word文档复制进来的.格式有些出入还望体谅.如有错误请回复.谢谢! 一. 系统介绍 2 二. 版本说明 3 三. 服务部署 3 1) JDK部署 3 2) Elasticsear ...

最新文章

  1. Google Deepmind大神David Silver带你认识强化学习
  2. Visio画大括号、花括号
  3. 如何使用grup制作U盘多重启动盘
  4. ActiveRecord学习(六):总结
  5. python 预测 位置_Python:核岭回归预测,KRR
  6. java很贵可以用before代替吗_Java内存模型与Volatile,Happen-Before原则等
  7. 如何仅凭 README 就名列 GitHub No.1 并收获上万 Star?
  8. 代理模式(Proxy)--静态代理
  9. classnotfoundexception是什么异常_大佬说“异常信息”是优秀程序员编写代码的宝贵财富,这是真的吗...
  10. java 友好变量单词_“友好”的英语单词是什么?
  11. 反编译工具Depends---dll和exe反编译工具
  12. win7如何关闭uac(图文详解)
  13. iOS之加速计、陀螺仪(UIAccelermeter、Core Motion)
  14. SuperMemo概念初识(摘录)
  15. numpy创建单位矩阵和对角矩阵
  16. 我的世界java地狱更新_【我的世界】我得世界:1.16地狱大年夜更新_玩得好游戏攻略...
  17. 分布式存储FastDFS(自用)
  18. DebugView 简单使用
  19. 优化Facebook广告ROI的数据驱动方法:从投放到运营
  20. CPU RISC-V技术

热门文章

  1. 阶梯英语2006年年终大会主持人发言稿
  2. wps的excel中的单元格限定输入的内容
  3. Java实训项目11:GUI学生信息管理系统 - 实现步骤 - 创建服务接口
  4. 【BZOJ4035】数组游戏,博弈论+分块乱搞
  5. 用php判断大月小月,php 获取月第一天和最后一天 | 学步园
  6. ping 丢包 网络摄像头_利用Zabbix监控工具自动帮我们检测目标网络状况
  7. bzoj1974 [Sdoi2010]代码拍卖会 循环+背包
  8. linux防火墙服务关闭,Linux防火墙(firewall)的开启与关闭
  9. centos安装redis并客户端连接_Linux(Centos)之安装Redis及注意事项
  10. 2016.8-2017.1 六履带四摆臂移动机器人测控系统