kafka集群配置

目录

前言

Broker端参数

存储相关参数 

Broker连接相关的参数 

 Topic管理相关的参数

数据留存相关的参数

Topic级别的参数

 Topic级别的参数有两种方式设置

JVM级别的参数 


前言

     Kafka作为一个优秀的开源组件,在业界别广泛使用,kafka官方提供了很多配置,供使用者不同的场景下进行配置以提升kafka的效率,合理的配置将直接提升kafka的吞吐量等,而错误的配置则可能引入生产事故等。本篇博文,从实际使用的角度出发,总结常用的、重要的参数说明及推荐配置值,确保大家能合理的使用kafka。


Broker端参数

存储相关参数 

log.dirs : 用于指定broker的若干个文件目录路径,没有默认值,必须手动指定。

在生产环境一定要给log.dirs配置多个路径,具体的配置格式遵循CSV的格式,用逗号隔开。比如:/app/kafka1,/app/kafka2,/app/kafka3这样。如果有条件尽量保证目录挂载到不同的物理磁盘上。这样做的好处为:

  1. 提升读写性能,多块物理磁盘同时读写数据有更高的吞吐量。
  2. 故障转移,坏掉的磁盘上的数据会自动转移到其他正常的磁盘上。

Broker连接相关的参数 

  • listeners:学名叫监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的Kafka服务。
  • advertised.listeners:和listeners相比多了个advertised。Advertised的含义表示宣称的、公布的,就是说这组监听器是Broker用于对外发布的。

我们具体说说监听器的概念,从构成上来说,它是若干个逗号分隔的三元组,每个三元组的格式为<协议名称,主机名,端口号>。 这里的协议名称可能是标准的名字,比如PLAINTEXT表示明文传输、SSL表示使用SSL或TLS加密传输等;也可能是你自己定义的协议名字,比如CONTROLLER: //localhost:9092。

三元组中的主机名和端口号则比较直观,不需要做过多解释。不过有个事情你还是要注意一下,经常有人会问主机名这个设置中我到底使用IP地址还是主机名。这里我给出统一的建议:最好全部使用主机名,即Broker端和Client端应用配置中全部填写主机名。 Broker源代码中也使用的是主机名,如果你在某些地方使用了IP地址进行连接,可能会发生无法连接的问题。

 Topic管理相关的参数

  • auto.create.topics.enable:是否允许自动创建Topic。
  • unclean.leader.election.enable:是否允许Unclean Leader选举。
  • auto.leader.rebalance.enable:是否允许定期进行Leader选举。

auto.create.topics.enable参数建议最好设置成false,即不允许自动创建Topic。

unclean.leader.election.enable参数建议设置成false,这个参数是指,是否允许OSR, (与leader副本同步滞后过多的副本(不包括leader)副本)参与lead选举,会影响消息丢失,如果OSR中的副本竞选 leader副本成功,那么其他副本上的数据可能会需要和leader副本数据同步,强制丢弃了数据。

auto.leader.rebalance.enable参数建议设置成false,即不允许自动定期选举leader副本,leader副本的选择是需要一定性能开销,影响kafka的稳定性。

数据留存相关的参数

  • log.retention.{hours|minutes|ms}:控制一条消息数据被保存多长时间。从优先级上来说ms设置最高、minutes次之、hours最低。
  • log.retention.bytes:这是指定Broker为消息保存的总磁盘容量大小。
  • message.max.bytes:控制Broker能够接收的最大消息大小。

一般使用hours设置消息留存的时间,一般设置log.retention.hours=168 表示默认保存7天的数据,自动删除7天前的数据,对于把kafka当做存储使用的场景,那这个值应该相应的调大。

log.retention.bytes。这个值默认是-1,表明你想在这台Broker上保存多少数据都可以。这个参数真正发挥作用的场景其实是在云上构建多租户的Kafka集群:设想你要做一个云上的Kafka服务,每个租户只能使用100GB的磁盘空间,为了避免有个“恶意”租户使用过多的磁盘空间,设置这个参数就显得至关重要了。

message.max.bytes。实际上今天我和你说的重要参数都是指那些不能使用默认值的参数,这个参数也是一样,默认的1000012太少了,还不到1MB。实际场景中突破1MB的消息都是屡见不鲜的,因此在线上环境中设置一个比较大的值还是比较保险的做法。毕竟它只是一个标尺而已,仅仅衡量Broker能够处理的最大消息大小,即使设置大一点也不会耗费什么磁盘空间的。

Topic级别的参数

    当设置broker级别的参数,又设置topic级别的参数后,谁会先说了算了,答案是topic级别的参数会覆盖broker级别的参数,比如topic消息的留存时间,broker的参数是整个服务器级别的, topic级别的参数是针对某个具体的topic进行设置。

  1. retention.ms:规定了该Topic消息被保存的时长。默认是7天,即该Topic只保存最近7天的消息。一旦设置了这个值,它会覆盖掉Broker端的全局参数值。
  2. retention.bytes:规定了要为该Topic预留多大的磁盘空间。和全局参数作用相似,这个值通常在多租户的Kafka集群中会有用武之地。当前默认值是-1,表示可以无限使用磁盘空间。
  3. max.message.bytes:它决定了Kafka Broker能够正常接收该Topic的最大消息大小。

 Topic级别的参数有两种方式设置

  • 创建Topic时进行设置
  • 修改Topic时设置 :通过kafka-configs 修改topic级别的参数

JVM级别的参数 

  虽然kafka服务端代码是用scale语言编写的,但是最终还是编译成class文件在JVm上运行的,因此JVM参数的设置对kafka集群的性能有重要影响。

  • KAFKA_HEAP_OPTS:指定堆大小。这个参数根据业界的实践,最好设置成6GB,kafka broker在客户端进行交互时会在JVM堆上创建大量的ByteBuffers示例,堆大小不能太小。
  • KAFKA_JVM_PERFORMANCE_OPTS:指定GC参数。

对应Jdk的版本,建议最低要选择jdk8 ,GC的参数当然要选择G1垃圾回收器,G1回收器会触发更少的Full Gc 需要的调整的参数也更少。

参考资料

极客时间课程《kafka核心技术与实战》

集群配置上、下篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值