美文网首页
Kafka集群参数配置(二)

Kafka集群参数配置(二)

作者: 我可能是个假开发 | 来源:发表于2023-01-18 23:18 被阅读0次

    一、Topic 参数

    每个 Topic 都能设置自己的参数值,这就是所谓的 Topic 级别参数

    1.retention.ms

    规定了该 Topic 消息被保存的时长。默认是 7 天,即该 Topic 只保存最近 7 天的消息。一旦设置了这个值,它会覆盖掉 Broker 端的全局参数值。

    2.retention.bytes

    规定了要为该 Topic 预留多大的磁盘空间。和全局参数作用相似,这个值通常在多租户的 Kafka 集群中会有用武之地。当前默认值是 -1,表示可以无限使用磁盘空间。

    3.max.message.bytes

    能处理的消息大小;决定 Kafka Broker 能够正常接收该 Topic 的最大消息大小。

    Topic 级别参数会覆盖全局 Broker 参数的值

    二、设置Topic级别参数

    1.创建 Topic 时进行设置

    用以下命令来创建 Topic:

    bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic transaction --partitions 1 --replication-factor 1 --config retention.ms=15552000000 --config max.message.bytes=5242880
    

    --config:在 config 后面指定了想要设置的 Topic 级别参数。

    2.修改 Topic 时设置

    自带的命令kafka-configs来修改 Topic 级别参数:

    bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name transaction --alter --add-config max.message.bytes=10485760
    

    建议使用第二种方式来设置。

    三、JVM 参数

    先说说 Java 版本,有条件的话至少使用 Java 8 。

    1.堆大小

    JVM 堆大小设置成 6GB,这是目前业界比较公认的一个合理值。

    2.垃圾回收器的设置

    Java 7

    • 如果 Broker 所在机器的 CPU 资源非常充裕,建议使用 CMS 收集器。启用方法是指定-XX:+UseCurrentMarkSweepGC
    • 否则,使用吞吐量收集器。开启方法是指定-XX:+UseParallelGC

    Java 8:
    可以手动设置使用 G1 收集器。在没有任何调优的情况下,G1 表现得要比 CMS 出色,主要体现在更少的 Full GC,需要调整的参数更少等,所以使用 G1 就好了。

    四、设置JVM 参数

    • KAFKA_HEAP_OPTS:指定堆大小。
    • KAFKA_JVM_PERFORMANCE_OPTS:指定 GC 参数。

    在启动 Kafka Broker 之前,先设置上这两个环境变量:

    $> export KAFKA_HEAP_OPTS=--Xms6g  --Xmx6g
    $> export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true
    $> bin/kafka-server-start.sh config/server.properties
    

    五、操作系统参数

    1.文件描述符限制

    通常情况下将它设置成一个超大的值是合理的做法,比如ulimit -n 1000000

    设置这个参数不重要,但不设置的话后果很严重,比如你会经常看到“Too many open files”的错误。

    2.文件系统类型

    文件系统指的是如 ext3、ext4 或 XFS 这样的日志型文件系统。
    XFS 的性能要强于 ext4,所以生产环境最好还是使用 XFS。

    3.Swappiness

    1.设置成 0,当物理内存耗尽时,操作系统会触发 OOM killer 这个组件,它会随机挑选一个进程然后 kill 掉,即根本不给用户任何的预警。

    2.设置成一个比较小的值,当开始使用 swap 空间时,至少能够观测到 Broker 性能开始出现急剧下降,从而给你进一步调优和诊断问题的时间。

    建议:将 swappniess 配置成一个接近 0 但不为 0 的值,比如 1。

    4.提交时间

    Flush 落盘时间。
    向 Kafka 发送数据并不是真要等数据被写入磁盘才会认为成功,而是只要数据被写入到操作系统的页缓存(Page Cache)上就可以了,随后操作系统根据 LRU 算法会定期将页缓存上的“脏”数据落盘到物理磁盘上。这个定期就是由提交时间来确定的,默认是 5 秒。一般情况下我们会认为这个时间太频繁了,可以适当地增加提交间隔来降低物理磁盘的写操作。

    如果在页缓存中的数据在写入到磁盘前机器宕机了,数据就丢失了。但鉴于 Kafka 在软件层面已经提供了多副本的冗余机制,因此这里稍微拉大提交间隔去换取性能还是一个合理的做法。

    极客时间《Kafka 核心技术与实战》学习笔记Day4 - http://gk.link/a/11UOV

    相关文章

      网友评论

          本文标题:Kafka集群参数配置(二)

          本文链接:https://www.haomeiwen.com/subject/oivfhdtx.html