首页 > 其他分享 >Kafka 集群参数配置介绍

Kafka 集群参数配置介绍

时间:2023-07-18 16:45:22浏览次数:60  
标签:-- Broker Kafka Topic 参数 磁盘 集群

目录

Broker 端

Broker 端参数也被称为静态参数(Static Configs),必须在 Kafka 的配置文件 server.properties 中进行设置的参数,不管是新增、修改还是删除。同时,你必须重启 Broker 进程才能令它们生效。

存储信息相关参数

  • lod.dirs: 指定了 Broker 需要使用的若干个文件目录路径。

    该参数没有默认值,需要手动指定多个路径,以逗号分隔,例如:/home/kafka1,/home/kafka2,/home/kafka3

    有条件的话,可以使这些目录挂载到不同的物理磁盘上,这样做有两个好处:

    • 提升读写性能:比起单块磁盘,多块物理磁盘同时读写数据有更高的吞吐量。

    • 能够实现故障转移:即 Failover。

      这是 Kafka 1.1 版本新引入的强大功能。要知道在以前,只要 Kafka Broker 使用的任何一块磁盘挂掉了,整个 Broker 进程都会关闭。

      从Kafka 1.1 版本开始,这种情况被修正了,出现坏盘后,Broker进程依然可以为好盘正常提供服务,一旦用户触发了reassign,Kafka支持将坏掉磁盘上的数据自动地转移到其他正常的磁盘上。

ZooKeeper 相关参数

ZooKeeper 是一个分布式协调框架,负责协调管理并保存 Kafka 集群的所有元数据信息,比如集群都有哪些 Broker 在运行、创建了哪些 Topic,每个 Topic 都有多少分区以及这些分区的 Leader 副本都在哪些机器上等信息。

  • zookeeper.connect

    该参数没有默认值,格式:zk1:2181,zk2:2181,zk3:2181

    当多套集群共用一个 ZooKeeper 时,可以使用增加一个 “chroot” 路径,将集群中所有kafka数据存放在特定的路径下,如下格式:

    • zk1:2181,zk2:2181,zk3:2181/kafka1

    • zk1:2181,zk2:2181,zk3:2181/kafka2

  • listeners:告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。

  • advertised.listeners:这组监听器是 Broker 用于对外发布的。

    一般用于双网卡主机或者 Docker 容器场景下,advertised.listeners配置为外网网卡,listeners配置为内网网卡。

Topic 相关参数

  • auto.create.topics.enable:是否允许自动创建 Topic。

    建议设置成 false,即不允许自动创建 Topic。

  • unclean.leader.election.enable:是否允许 Unclean Leader 选举。

    建议设置成 false,即不能让那些落后太多的副本竞选 Leader。

  • auto.leader.rebalance.enable:是否允许定期进行 Leader 选举。

    建议设置成 false,即不允许 Kafka 定期地对一些 Topic 分区进行 Leader 重选举。

数据存留相关参数

  • log.retention.{hours|minutes|ms}:这是个“三兄弟”,都是控制一条消息数据被保存多长时间。从优先级上来说 ms 设置最高、minutes 次之、hours 最低。

    通常情况下,我们还是设置 hours 级别即可,比如,log.retention.hours=168 表示默认保存 7 天的数据,自动删除 7 天前的数据。

  • log.retention.bytes:这是指定 Broker 为消息保存的总磁盘容量大小。

    一般云上构建多租户场景,需要关注这个参数。

  • message.max.bytes:控制 Broker 能够接收的最大消息大小。

    默认值 1000012 较小,建议设置为一个较大的数值。

Topic 级别参数

如果同时设置了 Topic 级别参数和全局 Broker 参数,Topic 级别参数会覆盖全局 Broker 参数的值,而每个 Topic 都能设置自己的参数值,这就是所谓的 Topic 级别参数。

Topic 级别参数有两种方式可以设置:

  • 创建 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
    
  • 修改 Topic 时设置

    例如,修改 Topic:

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

保存消息

  • retention.ms:规定了该 Topic 消息被保存的时长。

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

  • retention.bytes:规定了要为该 Topic 预留多大的磁盘空间。

    和全局参数作用相似,这个值通常在多租户的 Kafka 集群中会有用到。当前默认值是 -1,表示可以无限使用磁盘空间。

JVM 参数

  • 堆空间大小

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

  • 垃圾回收器

    • Java 7

      • 如果 Broker 所在机器的 CPU 资源非常充裕,建议使用 CMS 收集器。

        开启方法:指定 -XX:+UseCurrentMarkSweepGC 即可。

      • 否则,使用吞吐量收集器。

        开启方法:指定 -XX:+UseParallelGC 即可。

    • Java 8

      直接使用 G1 收集器即可。

具体设置堆空间和垃圾回收期的方法如下,只需要设置下面这两个环境变量即可:

  • 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

操作系统参数

文件描述符限制

建议,将其设置为一个较大的值,例如:

ulimit -n 1000000

文件系统类型

这里所说的文件系统指的是如 ext3、ext4 或 XFS 这样的日志型文件系统。根据官网的测试报告,XFS 的性能要强于 ext4,所以,生产环境建议选择 XFS。

Swappiness

Swappiness 的值可以在 0 到 100 之间,0 值指示内核积极避免尽可能使用物理内存。值 100 将积极地将进程的内存移动交换空间。大多数Linux发行版的默认 swappiness 值为 60。

建议设置成一个接近 0 但不为 0 的值,比如 1,例如

  • 临时修改

    sysctl vm.swappiness=1
    
  • 永久修改

    在文件 /etc/sysctl.conf 中添加:

    vm.swappiness=1
    

提交时间

向 Kafka 发送数据并不是真要等数据被写入磁盘才会认为成功,而是只要数据被写入到操作系统的页缓存(Page Cache) 上就可以了,随后,操作系统根据 LRU 算法,会定期将页缓存上的“脏”数据,落盘到物理磁盘上。

这个定期就是由提交时间来确定的,默认是 5 秒。一般情况下我们会认为这个时间太频繁了,可以适当地增加提交间隔来降低物理磁盘的写操作。

配置 flushd 进程把脏页写回到磁盘的是时间间隔,单位是 10ms。

例如,配置为10s,在文件 /etc/sysctl.conf 中编辑:

vm.dirty_writeback_centisecs=1000

当然你可能会有这样的疑问:如果在页缓存中的数据在写入到磁盘前机器宕机了,那岂不是数据就丢失了。

的确,这种情况数据确实就丢失了,但鉴于 Kafka 在软件层面已经提供了多副本的冗余机制,因此这里稍微拉大提交间隔去换取性能,还是一个合理的做法。


参考:

标签:--,Broker,Kafka,Topic,参数,磁盘,集群
From: https://www.cnblogs.com/larry1024/p/17562508.html

相关文章

  • c++ 参数引用传递
    1#include<iostream>2#include<thread>3#include<windows.h>4usingnamespacestd;5voidA(int&a){6cout<<"address"<<&a<<endl;;7cout<<"value"<<a......
  • CURL常用参数
    CURLcurl-XPOST-i'http://10.25.5.36/service/api/v1/province/registerSourceQuery'-H"Content-Type:application/json"-d'{"messageHeader":{"accessAccount":"43198521900","sign":"43198......
  • 第三章 Flink 集群搭建
    Flink集群搭建Flink可以选择的部署方式有:Local、Standalone(资源利用率低)、Yarn、Mesos、Docker、Kubernetes、AWS。我们主要对Standalone模式和Yarn模式下的Flink集群部署进行分析。我们对standalone模式的Flink集群进行安装,准备三台虚拟机,其中一台作为JobManager(hadoo......
  • 在 Windows Server 2022 中,可以通过调整注册表来修改内核参数。以下是一些常见的内核
    在WindowsServer2022中,可以通过调整注册表来修改内核参数。以下是一些常见的内核参数调整在WindowsServer2022中,可以通过修改注册表来调整TCP/IP栈参数、TCP策略和文件系统缓存。请注意,对注册表的更改需要谨慎操作,建议在进行更改之前备份注册表以及系统状态。调整线......
  • HandlerMethodArgumentResolver方法参数解析器的使用
    一、使用场景介绍HandlerMethodArgumentResolver,中文称为方法参数解析器,是SpringWeb(SpringMVC)组件中的众多解析器之一,主要用来对Controller中方法的参数进行处理。在一般的接口调用场景下,每次调用Controller都需要检查请求中的token信息,并根据token还原用户信息,然后将用户信息封......
  • 通过kubectl连接Kubernetes集群
    1、安装kubectl本地客户端安装kubectl添加kubernete阿里云yum源#cat>/etc/yum.repos.d/kubernetes.repo<<EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gp......
  • docker分布式存储之哈希槽3主3从redis集群配置+主从扩容缩容
    创建开启六台redis容器systemctlrestartdockerdockerpullredis:6.0.8根据需求下载redis的镜像版本配置3主3从开启六台redis容器分别用node-1~node-6来区分dockerrun-d--nameredis-node-1--nethost--privileged=true-v/tmp/redis/share/redis-node......
  • Oracle参数文件spfile
    spfile:serverparameterfile。spfile只能通过OEM(oracleenterprisemanager)软件或者altersystem命令进行修改。spfile是一个二进制文件,用来记录oracle实例的基本参数信息:实例名控制文件路径进程等信息默认在安装oracle时会创建:格式:spfile<ORACLE_SID>.ora[oracle@swq~......
  • ES集群搭建和Kibana管理集群
    搭建实例先复制2份解压后的完整目录,将里面的data和log删除.elasticsearch-6.8.23-node2elasticsearch-6.8.23-node3修改3个实例的配置文件:(只列出一份,其他的改一下节点名和监听端口、节点内部通信端口就可以了)#同一个集群中每个节点的集群名要一样。#集群是由一个或者多......
  • Scrapy如何在启动时向爬虫传递参数
    高级方法:一般方法:运行爬虫时使用-a传递参数scrapycrawl爬虫名-akey=values然后在爬虫类的__init__魔法方法中获取kwargsclassBang123Spider(RedisCrawlSpider):name="bang123"allowed_domains=["bang123.cn"]def__init__(self,*args,**kwargs):......