《kafka 核心技术与实战》课程学习笔记(五)

kafka 集群参数配置

  • 严格来说这些配置并不单单指 Kafka 服务器端的配置,其中既有 Broker 端参数,也有主题级别的参数、JVM 端参数和操作系统级别的参数。
    • Broker 端参数也被称为静态参数(Static Configs):
      • 所谓静态参数,是指你必须在 Kafka 的配置文件 server.properties 中进行设置的参数,不管你是新增、修改还是删除。
      • 同时,你必须重启Broker 进程才能令它们生效。
    • 主题级别参数的设置则有所不同,Kafka 提供了专门的 kafka-configs 命令来修改它们。
    • 至于 JVM 和操作系统级别参数,它们的设置方法比较通用化。

Broker 端参数

  • 首先 Broker 是需要配置存储信息的,即 Broker 使用哪些磁盘。那么针对存储信息的重要参数有以下这么几个:
    • log.dirs
      • 这是非常重要的参数,指定了 Broker 需要使用的若干个文件目录路径。
    • log.dir
      • 它只能表示单个路径,它是补充上一个参数用的。
    • 你只要设置 log.dirs,不要设置 log.dir。
      • 而且更重要的是,在线上生产环境中⼀定要为 log.dirs 配置多个路径,具体格式是⼀个 CSV 格式,也就是用逗号分隔的多个路径,比如 /home/kafka1, /home/kafka2, /home/kafka3 这样。
      • 如果有条件的话你最好保证这些目录挂载到不同的物理磁盘上。
        • 提升读写性能:比起单块磁盘,多块物理磁盘同时读写数据有更高的吞吐量。
        • 能够实现故障转移:即 Failover。坏掉的磁盘上的数据会自动地转移到其他正常的磁盘上,而且 Broker 还能正常工作。
  • 与 ZooKeeper 相关的设置。
    • 它是一个分布式协调框架,负责协调管理并保存 Kafka 集群的所有元数据信息,比如集群都有哪些 Broker 在运行、创建了哪些 Topic,每个 Topic 都有多少分区以及这些分区的 Leader 副本都在哪些机器上等信息。
    • Kafka 与 ZooKeeper 相关的最重要的参数当属 zookeeper.connect。
      • 这也是一个 CSV 格式的参数,比如我可以指定它的值 zk1:2181,zk2:2181,zk3:2181。
      • 2181 是 ZooKeeper 的默认端口。
    • 如果你有两套 Kafka 集群,假设分别叫它们 kafka1 和 kafka2,那么两套集群的 zookeeper.connect 参数可以这样指定:zk1:2181,zk2:2181,zk3:2181/kafka1 和 zk1:2181,zk2:2181,zk3:2181/kafka2。
    • 切记 chroot 只需要写一次,而且是加到最后的。
  • 第三组参数是与 Broker 连接相关的,即客户端程序或其他 Broker 如何与该 Broker 进行通信的设置。
    • listeners
      • 监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。
    • advertised.listeners
      • 和 listeners 相比多了个 advertised。
      • Advertised 的含义表示宣称的、公布的,就是说这组监听器是 Broker 用于对外发布的。
  • 第四组参数是关于 Topic 管理的。
    • auto.create.topics.enable
      • 是否允许自动创建 Topic。
      • auto.create.topics.enable 参数建议最好设置成 false,即不允许自动创建 Topic。
    • unclean.leader.election.enable
      • 是否允许 Unclean Leader 选举。
      • 这个参数在最新版的 Kafka 中默认就是 false。
    • auto.leader.rebalance.enable
      • 是否允许定期进行 Leader 选举。
      • 建议在生产环境中把这个参数设置成 false。
  • 最后一组参数是数据留存方面的:
    • log.retention.{hours|minutes|ms}
      • 控制一条消息数据被保存多长时间。
      • 从优先级上来说 ms 设置最高、minutes 次之、hours 最低。
    • log.retention.bytes
      • 这是指定 Broker 为消息保存的总磁盘容量大小。
    • message.max.bytes
      • 控制 Broker 能够接收的最大消息大小。

Topic 级别参数

  • Topic 级别参数会覆盖全局 Broker参数的值,而每个 Topic 都能设置自己的参数值,这就是所谓的 Topic 级别参数。
  • 从保存消息方面来考量的话,这组参数是非常重要的:
    • retention.ms
      • 规定了该 Topic 消息被保存的时长。
      • 默认是 7 天,即该 Topic 只保存最近 7 天的消息。
      • 一旦设置了这个值,它会覆盖掉 Broker 端的全局参数值。
    • retention.bytes
      • 规定了要为该 Topic 预留多大的磁盘空间。
      • 和全局参数作用相似,这个值通常在多租户的 Kafka 集群中会有用武之地。
      • 当前默认值是 -1,表示可以无限使用磁盘空间。
  • 如果从能处理的消息大小这个角度来看的话,有一个参数是必须要设置的,即 max.message.bytes。它决定了 Kafka Broker 能够正常接收该Topic 的最大消息大小。

JVM 参数

  • 堆大小这个参数至关重要。
    • JVM 堆大小设置成 6GB,这是目前业界比较公认的一个合理值。
    • Kafka Broker 在与客户端进行交互时会在 JVM 堆上创建大量的 ByteBuffer 实例,Heap Size 不能太小。
  • JVM 端配置的另一个重要参数就是垃圾回收器的设置,也就是平时常说的 GC 设置。
    • Java 8 可以手动设置使用 G1 收集器。
    • 在没有任何调优的情况下,G1 表现得要比 CMS 出色,主要体现在更少的 Full GC,需要调整的参数更少等,所以使用 G1 就好了。
  • 在启动 Kafka Broker 之前,先设置上这两个环境变量:
    $> export KAFKA_HEAP_OPTS=--Xms6g --Xmx6g
    $> export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC -XX:MaxGCPauseMillis=2
    $> bin/kafka-server-start.sh config/server.properties
    

操作系统参数

  • 通常情况下,Kafka 并不需要设置太多的 OS 参数,但有些因素最好还是关注一下:
    • 文件描述符限制
      • 通常情况下将 ulimit -n 设置成一个超大的值是合理的做法,比如 ulimit -n 1000000。
    • 文件系统类型
      • 文件系统指的是如 ext3、ext4 或 XFS 这样的日志型文件系统。
      • XFS 的性能要强于 ext4,所以生产环境最好还是使用 XFS。
    • Swappiness
      • 可以设置成一个较小的值。
      • 一旦设置成 0,当物理内存耗尽时,操作系统会触发 OOM killer 这个组件,它会随机挑选一个进程然后 kill 掉,即根本不给用户任何的预警。
      • 但如果设置成一个比较小的值,当开始使用 swap 空间时,你至少能够观测到 Broker 性能开始出现急剧下降,从而给你进一步调优和诊断问题的时间。
    • 提交时间
      • 向 Kafka 发送数据并不是真要等数据被写⼊磁盘才会认为成功,而是只要数据被写入到操作系统的页缓存(Page Cache)上就可以了,随后操作系统根据 LRU 算法会定期将页缓存上的“脏”数据落盘到物理磁盘上。
      • 这个定期就是由提交时间来确定的,默认是 5 秒。
      • 一般情况下我们会认为这个时间太频繁了,可以适当地增加提交间隔来降低物理磁盘的写操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值