前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kafka精进 | Broker服务端核心参数解析

Kafka精进 | Broker服务端核心参数解析

作者头像
大数据技术架构
修改2020-04-22 19:46:13
1.2K0
修改2020-04-22 19:46:13
举报

一、Kafka概述

关于Kafka,我们在之前的文章里也介绍,简而言之Kafka是一个分布式消息引擎与流处理平台,经常用做企业的消息总线、实时数据管道,有时还可以当做存储系统来用。基本架构如下:

Kafka的设计遵循生产者消费者模式,其中生产者和消费者都属于客户端,服务端则是由多个broker实例组成,broker主要负责接收和处理来自客户端的请求,以及对消息进行持久化。更多原理可以参考另一篇文章:如何快速全面掌握Kafka?5000字吐血整理。本文根据笔者的生产实践,结合社区的一些宝贵经验,重点介绍下Kafka集群broker端的核心参数,并给出了部分参数的调优建议,希望对Kafka使用者有所帮助。

二、broker端核心参数

1. broker.id

参数说明:broker的唯一标识id,默认值为-1,如果不指定Kafka会自动生成一个id。生产环境推荐设置从0开始,按1递增的数字,比如0,1,2,3...等。

2. log.dirs

参数说明:设置Kafka持久化消息的数据目录,如果不设置Kafka会将消息持久化到/tmp/kafka-logs,通常都需要我们手动设置。多个目录逗号分隔,也就是一个csv列表。

调优建议:这是必须要上线前规划好的,建议设置成挂载不同磁盘的多个数据目录。创建topic时分区会自动均匀的分布到不同目录里,磁盘的io请求与空间占用也会负载均衡。

3. zookeeper.connect

参数说明:指定Kafka依赖的ZK连接信息,这个参数同样是一个csv列表,比如:zk1:2181,zk2:2181,zk3:2181。因为Kafka依靠Zookeeper做分布式协调服务,负责存储和管理Kafka集群中的元数据,包括broker列表、topic信息、分区与副本信息等。因此这是一个比较重要的参数。

调优建议:如果要使用一套ZK集群管理多套Kafka集群,这个时候可以在参数设置时指定ZK的chroot,比如使用zk1:2181,zk2:2181,zk3:2181/kafka1与zk1:2181,zk2:2181,zk3:2181/kafka2代表两套Kafka集群。

4. listeners

参数说明:broker监听器,这是客户端要连接broker的入口地址列表,由一个csv格式的三元组组成,三元组的格式为<协议名称,主机名,端口号>。当前Kafka支持的协议类型包括PLAINTEXT、SSL与SASL_SSL,如果未启用安全认证,使用PLAINTEXT协议即可,比如PLAINTEXT:192.168.10.2:9092。

5. advertised.listeners

参数说明:这个也是broker的监听器,advertised的含义可以理解为公布的、对外的,这个参数通常用来绑定公网IP以配置Kafka外网访问使用。

6. auto.create.topics.enable

参数说明:是否允许自动创建topic,默认值为true。当消息发送到服务端发现topic不存在时会自动创建topic。经常会因开发人员写错topic名称,导致服务端存在一些稀奇古怪的topic。

调优建议:生产环境建议设置为false,禁用topic自动创建,严格管理topic资源。

7. unclean.leader.election.enable

参数说明:是否允许Unclean Leader选举,默认值为true。这个参数用于控制是否允许非同步副本(即不在ISR集合中的副本,关于ISR集合介绍请参考:如何快速全面掌握Kafka?5000字吐血整理)参与leader选举,非同步副本中的消息远远落后于leader,如果选举这种副本作为leader可能会造成数据丢失,但会保证服务继续可用。

调优建议:生产环境建议设置为false,关闭Unclean leader选举,因为通常数据的一致性要比可用性更加重要。

8. auto.leader.rebalance.enable

参数说明:是否允许自动leader rebalance功能,默认值为true。默认情况下,Kafka控制器会启动一个定时任务,在满足一定条件(Kafka认为当前leader不够均衡,参考leader.imbalance.per.broker.percentage)时进行leader重选举。

调优建议:考虑到leader重选举的代价比较大,可能会带来性能影响,也可能会引发客户端的阻塞,生产环境建议设置为false。

9. log.retention.{hours|minutes|ms}

参数说明:这三个参数控制消息数据的过期时间,后面的参数比前面的优先级高,默认的消息过期时间是7天。这是时间维度的控制策略,另外还有一个参数log.retention.bytes定义了针对分区的空间维度控制策略,此参数默认值为-1,表示不使用这种策略删除数据,可以仅做了解。

调优建议:建议根据磁盘空间结合业务需要,合理设置参数,一般优先设置log.retention.ms。

10. message.max.bytes

参数说明:broker端能够接收的最大消息大小,默认值为1000012,约等于977KB。

调优建议:默认值偏小,生产环境建议根据实际情况调大该参数。

11. compression.type

参数说明:broker端消息的压缩类型,默认值为producer,表示根据生产者使用的压缩类型,也就是说无论生产者使不使用压缩或者使用了何种压缩,broker端都继承其行为。Kafka目前支持的压缩类型包括gzip、snappy、lz4 及 zstd(Kafka 2.1.0开始支持)。

调优建议:这个参数不建议修改,因为broker端如果和生产者压缩方式不一致,消息达到服务端后要进行解压-压缩操作,严重影响性能。

12. threads相关参数

参数说明:三个线程数配置:num.network.threads,num.io.threads 及 background.threads,分别表示处理网络请求(接收请求与返回响应)的线程数、处理实际请求的线程数(包含磁盘IO等)与执行后台任务的线程数,默认值分别为3、8、10。

调优建议:通常不建议修改,除非参考JVM相关指标(*AvgIdlePercent)发现线程空闲率比较高或低时,可以适当做出调整。

三、小结

本文列举了笔者认为最重要的十多个broker端参数,其实broker端参数远不止这些,有些参数虽然不需要特意设置但却非常重要,这里不能一一列举,更多的参数含义及使用方法可以参考Kafka官网http://kafka.apache.org/documentation/#brokerconfig。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据技术架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档