文档章节

【译】Kafka最佳实践

huxihx
 huxihx
发布于 2017/05/19 16:49
字数 1067
阅读 127
收藏 3

    本文来自于DataWorks Summit/Hadoop Summit上的《Apache Kafka最佳实践》分享,里面给出了很多关于Kafka的使用心得,非常值得一看,今推荐给大家。

硬件配置

JBOD: Just bunch of disks,就是普通的一堆磁盘组成的集群

OS调优

1 页缓存:尽量分配与所有日志的激活日志段大小相同的页缓存大小

2 文件描述符限制: 10万以上

3 禁掉swap

4 使用Java 8和G1,分配6~8GB的堆大小

 磁盘调优

1 使用多块磁盘,专属分配给kafka

2 一般环境使用JBOD即可,但JBOD有一些固有的缺陷,比如磁盘失败将导致Kafka异常关闭,造成数据不一致,社区已经着手解决

3 使用EXT4或XFS

4 尽量使用SSD

基本监控

1 CPU负载

2 网络带宽

3 文件句柄数

4 磁盘空间

5 磁盘IO性能

6 垃圾回收

7 zookeeper监控

如何监控备份不足情况发生?

JMX指标:kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions

可能原因

  • broker挂了
  • controller问题
  • zk问题
  • 网络问题

解决办法

  • 调整ISR参数,比如 min.insync.replica和replica.lag.time.max.ms, num.replica.fetchers
  • 增加broker数

Controller问题

1 避免zk会话超时

  • ISR抖动
  • zk性能问题
  • Long GC
  • 网络问题

 2 监控controller

  • kafka.controller:type=KafkaController,name=ActiveControllerCount应该=1
  • 监控LeaderElectionRate

unclean leader选举

1 允许非ISR中的副本成为leader

2 监控JMX指标: kafka.controller:type=ControllerStats,name=UncleanLeaderElectionsPerSec

集群评估(sizing)

1 broker评估

  • 单broker上的分区数<2000
  • 控制分区大小,不要超过25GB

2 broker数评估:根据retention和流量进行评估

3 集群扩展

  • 磁盘使用率<60%
  • 网络使用率<75%

4 集群监控

  • 确保topic分区分布尽量均匀
  • 确保broker节点不会磁盘、带宽耗尽

Broker监控

1 分区数: kafka.server:type=ReplicaManager,name=PartitionCount

2 leader副本数: kafka.server:type=ReplicaManager,name=LeaderCount

3 ISR扩容率/缩容率:kafka.server:type=ReplicaManager,name=IsrExpandsPerSec

4 入站消息/出站消息:Message in rate/Byte in rate/Byte out rate

5 broker网络请求处理平均空闲率: NetworkProcessorAvgIdlePercent

6 请求平均处理空闲率: RequestHandlerAvgIdlePercent

Topic评估

1 分区数

  • 至少和最大的消费者组中consumer的数量一致
  • 分区不要太大,小于25GB
  • 要考虑未来业务的扩容

2 使用keyed消息,即指定key

3 为扩展分区确立阈值,即确定当分区大小达到阈值时增加topic分区数

选择分区

1 基于TPS需求大致确定分区数, 即目标TPS/min(Producer TPS, Consumer TPS)

2 更多分区意味着更多的文件句柄、消息处理延时和更多的内存使用

份额控制

1 避免恶意客户端并维护SLA

2 设定字节率阈值限制

3 监控throttle-rate,byte-rate

4 replica.fecth.response.max.bytes: 设置follower副本FETCH请求response大小

5 限制带宽: kafka-reassign-partitions.sh --throttle options...

Kafka producer

1 使用Java版本producer

2 使用kafka-producer-perf-test.sh测试

3 设置好内存、cpu、batch、压缩等参数

  • batch.size: 越大,TPS越大,延时也越大
  • linger.ms: 越大,TPS越大,延时也越大
  • max.in.flight.requests.per.connection: 增加TPS,关乎消息接收顺序
  • compression.type: 设置压缩类型,提升TPS
  • acks: 设置消息持久性级别 

4 避免发送大消息(会使用更多内存,降低broker处理)

性能调优

1 如果TPS<网络带宽

  • 增加用户线程
  • 增加batch size
  • 使用多个producer实例
  • 添加分区

2 acks=-1时如何降低延时:增加num.replica.fetchers

3 跨数据中心的传输:增加Socket缓冲区设置,以及TCP缓存设置

监控指标

  • batch-size-avg
  • compression-rate-avg
  • waiting-threads
  • buffer-available-bytes
  • record-queue-time-max
  • record-send-rate
  • records-per-request-avg

Kafka Consumer

1 使用kafka-consumer-perf.test.sh测试

2 TPS问题

  • 分区数不够
  • OS缓存命中太低,分配更多页缓存
  • 处理逻辑过重

3 位移管理: 异步提交+手动提交

4 重要参数

  • fetch.min.bytes、fetch.max.wait.ms
  • max.poll.interval.ms
  • max.poll.records
  • session.timeout.ms

监控

1 consumer lag

2 JMX指标: records-lag-max

3 bin/kafka-consumer-groups.sh

4 如何减少lag

  • 分析consumer,是GC问题还是consumer hang住了
  • 增加consumer instances
  • 增加分区数

无数据丢失配置

1 producer端

  • retries = MAX
  • acks=all
  • max.in.flight.requests.per.connection = 1
  • 关闭producer

 2 broker端

  • replication factor >= 3
  • min.insync.replicas = 2
  • 关闭unclean leader选举

 3 consumer端

  • 关闭auto.offset.commit
  • 消息被处理后提交位移

© 著作权归作者所有

huxihx
粉丝 1
博文 18
码字总数 30674
作品 0
东城
程序员
私信 提问
Apache Kafka × Apache Flink Meetup-北京站

出 品 人 秦江杰 阿里巴巴 高级技术专家 阿里巴巴实时计算平台高级技术专家。硕士毕业于卡耐基梅陇大学,曾任职于LinkedIn负责Apache Kafka的开发,是Apache Kafka PMC member。目前在阿里巴...

Flink_China
04/08
43
0
福利丨这也许是目前市面上最权威的Kafka学习指南!

Kafka,不是村上春树的《海边的卡夫卡》,不是《变形记》的作者弗兰兹·卡夫卡。程序员世界里的 Kafka,有三分之一的世界 500 强公司都在使用它发布和订阅、存储及实时地处理大规模流数据。 ...

DBAplus社群
2018/01/15
0
0
RESTful API 设计参考文献--restful-api-design-references

restful-api-design-references是RESTful API 设计参考文献列表,可帮助你更加彻底的了解REST风格的接口设计。 RESTful 介绍及设计思路 Principles of good RESTful API Design(译:好 REST...

匿名
2016/09/12
1K
2
Kafka数据迁移MaxCompute最佳实践

前提条件 搭建Kafka集群 进行数据迁移前,您需要保证自己的Kafka集群环境正常。本文使用阿里云EMR服务自动化搭建Kafka集群,详细过程请参见:Kafka 快速入门。 本文使用的EMR Kafka版本信息如...

付帅
05/29
0
0
Kafka如何做到1秒处理1500万条消息?

Apache Kafka 是一款流行的分布式数据流平台,它已经广泛地被诸如 New Relic(数据智能平台)、Uber、Square(移动支付公司)等大型公司用来构建可扩展的、高吞吐量的、且高可靠的实时数据流系统...

架构师springboot
2018/10/21
705
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
今天
4
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
今天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
今天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
今天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部