Kafka参数配置及性能优化

本文详细介绍了Kafka的配置优化,包括Broker、Topic、Producer和Consumer的配置策略,以及Kafka服务器的整体优化。强调了正确配置分区数量、消息顺序保证、内存和磁盘性能的重要性,同时也提到了网络和JVM参数的调优方法,以提升Kafka的性能和稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

broker配置

Topic配置

 Producer配置

Consumer配置

kafka服务器优化


broker配置

 一个独立的 Kafka 服务器被称为broker。它接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker 为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。

配置项 说明
broker.id 每个broker 都需要有个标识符,使用 broker.id 来表示。它的默认值是0,也可以被设成其任意整数。这个值在整个kafka集群里必须是唯一的。这个值可以任意选定,如果出于维护的需要,可以在服务器节点间交换使用这些ID 。建议把它们设置成与机器名具相关性的整数,这样在进行维护时,将 ID 号映射到机器名就没那么麻烦了。例如,如果机器名包含唯一性的数字(比如 hostl.example.com、host2.example.com ),那么用这些数来设置 broker.id 就再好不过了。
port  kafka默认会监听 9092 端口。修改 port 配置参数可以把它设成其他任意可用的端口。注意,如果使用1024 以下的端口,需要使用 root 权限启动Kafka ,不过不建议这么做。
zookeeper.connect
用于保存 b roker 元数据的 Zoo ke 地址是通过 zookeepe .connect 来指定的。 localhost:2181 表示这个 Zooke 是运行在本地的 21 81 端口上 。该 配置参数是用 冒号分 隔的 hostnal'le:por t/path 列表,每 部分的含义如下:
  • hostname是Zookeeper服务器的机器名或 IP 地址;
  • port是Zookeeper的客户端连接端口;
  • /parth 是可选的 Zookeeper路径,作为kafka 集群的 chroot 环境。如果不指定,默认使根路径。如果指定的 hroot 路径不存在, broker 会在启动的时候创建它。
lo g . dirs
Kafka 把所有消息都保存在磁盘上,存放这些日志片段的目录是通过 l og.d irs 指定的。它是一 组用逗号分隔的本地文件系统路径。如果指定了多个路径,那么 b roke 会根据“最少使 用”原则,把同一 个分区的日志片段保存到同一个路径下。注意, broker 会往拥有最少数目分区的路径新增分区,而不是往拥有最小磁盘空间的路径新增分区。
nu m.recovery . threads.per. data.dir
对于 如下三 种情况, Kafka 会使用可配置的线程池来处理日志片段:
  • 服务器正常启动,用于打开每个分区的日志片段;
  • 服务器崩愤后重启,用于检查和截短每个分区的日志片段;
  • 服务器正常关闭,用于关闭日志片段;
默认情况下 ,每个日志目录只使用一个线程。因为这些线程只是在服务器启动和关闭时会 用到 ,所以完全可以设置大量的线程来达到井行操作的目的。特别是对于包含大量分区的 服务器来说,一 旦发生崩愤,在进行恢复时 使用并行操作可能会省下数 小时的时 间。设置 此参数时需要注意,所配置的数字对应的是 log. dir 指定的单个日志目录。也就是说,如果num.recovery. threads.per.data.dir 被设为8,并且 log.dir 指定了3个路径,那么总共需 24 个线程。
a uto . c r ea t e . topics . enable
默认 情况下, Kafka 会在如下几种情形下自动创 建主题:
当一 个生产者开始往主题写入消息时;
当一 个消费者开始从主题读取消息时;
任意一个客 户端向主题发送元数据请求时;
根据 kafka  协 议,如果一个主题不先被创建, 根本无法知道它是否已经存在。如果显式地创 建主题, 不管是手动创 建还是通过其 配置 系统来 创建,都可以把 auto.create.topi..cs enable 设为 false。

如何选定Broker数量:一个Kafka 集群需要多少个 broker 决于以下几个因素:

首先,需要多少磁盘空间来保留数据,以及单个 broker 有多少空间可用。如果整个集群需要保留 10TB 的数据, 每个 broker 可以存储 2TB ,那么至少需要5个 broker 。如果启用了数据复制,那么至少还需要一倍的空间,不过这要取决于配置的复制系数是多少。 也就是说,如果启用了数据复制,那么这个集群至少需要 10 broker。

其次,要考虑的因素是集群处理请求的能力。这通常与网络接口处理客户端流量的能力有关,特别是当有多个消费者存在或者在数据保留期间流量发生波动(比如高峰时段的流量爆发)时。如果单个 broker 的网络接口在高峰时段可以达到80%的使用量,并且有两个消费者,那么消费者就无法保持峰值,除非有两个 broker 。如果集群启用了复制功能,则要把这个额外的消费者考虑在内。因磁盘吞吐量低和系统内存不足造成的性能问题,也可以通过扩展多个 broker 来解决。

Topic配置

配置项 说明
num.par itions
num.par itions 参数指定了新创建的主题将包含多少个分区。如果启用了主题自动创建功能(该功能默认是启用的),主题分区的个数就是该参数指定的值 。该参数 的默认值是1。要注意,我们可以增加主题分区的个数,但不能减少分区的个数。所以,如果耍让一 个主 题的分区个数少于  num.par itions 指定的值,需要手动创建该主题。
log.retention.ms
Kafka 通常根据时间来决定数据可以被保留多久。默认使用 log. r etentlon.hour  参数来配 置时间 ,默认值为 168 小时,也就是 一周。除 此以外,还有其他两个参数 log.retention.minutes和log.retention.ms。这3个参数的作用是一样的,都是决定消息多久以后会被删 除,不过还是推荐使用 log.retention.ms。如果指定了不止一 个参数, Kafka 会优先使用 具有最小值的那个参数
log.r etention . bytes
另一种方式是通过保留的消息字节数来判断消息是否过期。它的值通过参数 log.retention.bytes 来指定,作用在每一个分区上。也就是说,如果有一个包含8个分区的主题,并且 log.retention.bytes 被设为 1GB ,那么这个主题最多可以保留 8GB 的数据。所以,当主题的分区个数增加时,整个主题可以保留的数据也随之增加。如果同时指定了 log.retention.bytes 和 log.retention.bytes (或者另一个时间参数),只要任意一个条件得到满足,消息就会被删除。
log.segment.bytes
以上的设置都作用在日志片段上,而不是作用在单个消息上。当消息到达 broker 时,它们被追加到分区的当前日志片段上。当日志片段大小达到 log.segment.bytes 定的上限(默认是 1GB )时,当前日志片段就会被关闭,一个新的日志片段被打开。如果一个日志片段被关闭,就开始等待过期。这个参数的值越小,就会越频繁地关闭和分配新文件,从而降低磁盘入的整体效率。
如果主题的消息量不大,那么 如何调整这个参数的大小就变得尤为重要。例如,如果一个 主题 每天只接收 100MB 的消息,而 log.segment.bytes 使用默认设置,那么需要 10 天时 间才能填满 个日志片段。因为在日志片段被关闭之前消息是不 会过期的,所以如果 log.r etention.ms  被设为 604 800000 ( 周),那么日志片段最多需要 17 天才会过期。 这是因为关闭日志片段需要 10 天的时间,而根据配置的过期时间,还需要再保留7 天时 间(要等到日志片段里的最后一 个消息过期才能被删除)
log.segment.ms
另一个可以控制日志片段关闭时间的参数是 log.segment.ms,它指定了多长时间之后日志片段会被关闭。就像 log.retention.bytes 和 log.retention.ms 这两个参数一
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值