【译】Kafka最佳实践 / Kafka Best Practices
本文来自于DataWorks Summit/Hadoop Summit上的《Apache Kafka最佳实践》分享,里面给出了很多关于Kafka的使用心得,非常值得一看,今推荐给大家。
硬件配置
JBOD: Just bunch of disks,就是普通的一堆磁盘组成的集群
OS调优
磁盘调优
基本监控
如何监控备份不足情况发生?
JMX指标:kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions
- broker挂了
- controller问题
- zk问题
- 网络问题
- 调整ISR参数,比如 min.insync.replica和replica.lag.time.max.ms, num.replica.fetchers
- 增加broker数
controller问题
- ISR抖动
- zk性能问题
- Long GC
- 网络问题
- kafka.controller:type=KafkaController,name=ActiveControllerCount应该=1
- 监控LeaderElectionRate
unclean leader选举
集群评估(sizing)
- 单broker上的分区数<2000
- 控制分区大小,不要超过25GB
- 磁盘使用率<60%
- 网络使用率<75%
- 确保topic分区分布尽量均匀
- 确保broker节点不会磁盘、带宽耗尽
broker监控
topic评估
- 至少和最大的消费者组中consumer的数量一致
- 分区不要太大,小于25GB
- 要考虑未来业务的扩容
选择分区
份额控制
Kafka producer
- batch.size: 越大,TPS越大,延时也越大
- linger.ms: 越大,TPS越大,延时也越大
- max.in.flight.requests.per.connection: 增加TPS,关乎消息接收顺序
- compression.type: 设置压缩类型,提升TPS
- acks: 设置消息持久性级别
性能调优
- 增加用户线程
- 增加batch size
- 使用多个producer实例
- 添加分区
监控指标
- batch-size-avg
- compression-rate-avg
- waiting-threads
- buffer-available-bytes
- record-queue-time-max
- record-send-rate
- records-per-request-avg
Kafka Consumer
- 分区数不够
- OS缓存命中太低,分配更多页缓存
- 处理逻辑过重
- fetch.min.bytes、fetch.max.wait.ms
- max.poll.interval.ms
- max.poll.records
- session.timeout.ms
监控
- 分析consumer,是GC问题还是consumer hang住了
- 增加consumer instances
- 增加分区数
无数据丢失配置
- retries = MAX
- acks=all
- max.in.flight.requests.per.connection = 1
- 关闭producer
- replication factor >= 3
- min.insync.replicas = 2
- 关闭unclean leader选举
- 关闭auto.offset.commit
- 消息被处理后提交位移
【译】Kafka最佳实践 / Kafka Best Practices的更多相关文章
- Kafka最佳实践
一.硬件考量 1.1.内存 不建议为kafka分配超过5g的heap,因为会消耗28-30g的文件系统缓存,而是考虑为kafka的读写预留充足的buffer.Buffer大小的快速计算方法是平均磁盘写 ...
- window下Kafka最佳实践
Kafka的介绍和入门请看这里kafka入门:简介.使用场景.设计原理.主要配置及集群搭建(转) 当前文章从实践的角度为大家规避window下使用的坑. 1.要求: java 6+ 2.下载kafka ...
- 【iOS10 SpeechRecognition】语音识别 现说现译的最佳实践
首先想强调一下“语音识别”四个字字面意义上的需求:用户说话然后马上把用户说的话转成文字显示!,这才是开发者真正需要的功能. 做需求之前其实是先谷歌百度一下看有没有造好的轮子直接用,结果真的很呵呵,都是 ...
- 【转】优化Web程序的最佳实践
自动排版有点乱,看着蛋疼,建议下载中文PDF版阅读或阅读英文原文. Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践.他们为此进行了 一系列的实验.开发了各 ...
- 大规模使用 Apache Kafka 的20个最佳实践
必读 | 大规模使用 Apache Kafka 的20个最佳实践 配图来源:书籍<深入理解Kafka> Apache Kafka是一款流行的分布式数据流平台,它已经广泛地被诸如New Re ...
- Apache Kafka: 优化部署的10个最佳实践
原文作者:Ben Bromhead 译者:江玮 原文地址:https://www.infoq.com/articles/apache-kafka-best-practices-to-opti ...
- Kafka在大型应用中的 20 项最佳实践
原标题:Kafka如何做到1秒处理1500万条消息? Apache Kafka 是一款流行的分布式数据流平台,它已经广泛地被诸如 New Relic(数据智能平台).Uber.Square(移动支付公 ...
- Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践
Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践 本篇博文主要提供一个在 SpringBoot 中自定义 kafka配置的实践,想象这样一个场景:你的系统 ...
- JavaScript初学者应知的24条最佳实践(译)
原文:24 JavaScript Best Practices for Beginners 译者:youngsterxyf (注:阅读原文的时候没有注意发布日期,觉得不错就翻译了,翻译到JSON.pa ...
随机推荐
- 路由策略和策略路由 & route-map
今天,这个专题应用下route-map,在这个之前,有很多内容需要掌握,不是简单的制定一个路由图就可以了. -------- 本次专题理论的东西居多,但是不是复制黏贴,是加上自己的理解思想. 第一个要 ...
- Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 【转】
一.安装Golang的SDK 在官网 http://golang.org/ 直接下载安装包安装即可.下载pkg格式的最新安装包,直接双击运行,一路按照提示操作即可完成安装. 安装完成后,打开终端,输入 ...
- 【Html】Clipboard.js 实现点击复制,剪切板操作
可以使用cdn 或者直接下载 设置好引用路径(百度云下载) <script type="text/javascript" src="./dist/clipboard ...
- python爬虫数据-下载图片经典案例
'''Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据.首先,我们定义了一个getHtml()函数: urllib.urlopen()方法用于打开 ...
- Spring JDBC SqlUpdate类示例
org.springframework.jdbc.object.SqlUpdate类提供了表示SQL更新的可重用操作对象. 使用到的 Student 表的结构如下 - CREATE TABLE Stu ...
- 数据抓取的艺术(三):抓取Google数据之心得
本来是想把这部分内容放到前一篇<数据抓取的艺术(二):数据抓取程序优化>之中.但是随着任务的完成,我越来越感觉到其中深深的趣味,现总结如下: (1)时间 时间是一个与抓取规模相形而 ...
- Newtonsoft.Json 序列化小写首字母
//json对象命名小驼峰式转换var json = JsonConvert.SerializeObject(newAccount, Formatting.Indented, new JsonSeri ...
- Unity---------Mesh理解
Mesh顾名思义“网格”,Unity3D里面所有的模型都是由Mesh组成的,UI也不例外. 例如下图,模型上的一个个小网格就是Mesh,这些Mesh有不同的三维顶点(Vector3),共同组成了一个3 ...
- ASP.NET EntityFrameworkCore code first 多对多设计
摘要:参考网址:https://docs.microsoft.com/zh-cn/ef/core/get-started/full-dotnet/new-db场景:使用ASP.NETEntityFra ...
- Yii2 cache的用法(1)
数据缓存需要缓存组件提供支持,它代表各种缓存存储器, 例如内存,文件,数据库. 'components' => [ 'cache' => [ 'class' => 'yii\cach ...