Kafka之常用参数配置整理

一、Broker端参数

1、存储

  • log.dirs:指定broker使用的若干个文件目录路径。(无默认值,必须指定)
  • log.dir:配置单个路径,用于上个参数的补充。

通常情况下,我们只需要设置log.dirs即可。而且建议配置多个路径,比如:/home/kafka1,/home/kafka2,/home/kafka3。并且,如果条件允许,最好将这些目录挂载到不同的物理磁盘。这样做有两个好处:

  • 提升读写性能。多块物理磁盘同时读写数据具有更高的吞吐量
  • 故障转移(Failvoer)。在之前Kafka Broker任何一块磁盘挂掉,整个Broker都会停止提供服务。在Kafka1.1开始,坏掉的磁盘上的数据会自动转移到其他正常磁盘上,并且Broker还能正常工作。

2、Zookeeper

Zookeeper在Kafka中扮演着重要的角色,它是一个分布式协调框架,负责协调管理Kafka集群的所有元数据。比如:Broker信息、Topic、每个Topic的partition、partition的Leader副本信息等。

  • zookeeper.connect:链接zookeeper的地址。比如我可以指定它的值为zk1:2181,zk2:2181,zk3:2181

如果需要让多个Kafka集群使用同一个Zookeeper集群,这个参数应该怎么设置?chroot是Zookeeper的概念,类似于别名。

如果你有两套 Kafka 集群,假设分别叫它们kafka1kafka2,那么两套集群的zookeeper.connect参数可以这样指定:zk1:2181,zk3:2181/kafka1zk1:2181,zk3:2181/kafka2。切记 chroot 只需要写一次,而且是加到最后的。

3、连接

客户端或其他Broker和本Broker的通信设置。

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

监听器的格式:<协议名称,主机名,端口号>。比如protocol://host:port

4、Topic管理

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

auto.create.topics.enable在线上生产环境一定要改为false,特别是将Kafka用作基础组件,会出现各种稀奇古怪的topic。运维需要严格把控Topic的创建。

unclean.leader.election.enableUnclean Leader选举,建议设置为false。解释一下unclean,就是那些同步数据落后太多的partition。最新版Kafka默认是false,即不允许落后太多的副本进行Leader选举。如果设置为true,那么那些同步较为落后的副本也会参与选举,如果选为Leader,其他副本就会截取掉多余的数据,造成数据丢失。

但是。假设那些保存数据较多的副本都挂了,并且参数设置为false,服务将会不可用。如果设置为true,这时参数就派上用场了,可以从同步较慢的主机中选择leader,虽然丢失数据,Broker还是可以提供服务。

auto.leader.rebalance.enable如果设置为true,表示允许Kafka定期对一些Topic的partition进行Leader重选举。上个参数发生在Leader故障的情况,这个参数和它不同的是,他不是选Leader,而是定期换Leader。比如尽管LeaderA表现一直很有好,但是参数设置为true的情况下,有可能会强行换副本B为Leader。换一次Leader的代价很高,并且这种操作实质上没有任何性能收益,故建议设置为false

5、数据留存

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

log.retention.hours=168默认设置,表示保存7天,自动删除七天前的数据,通常情况下,在保证磁盘空间足够时,我们尽量将这个值调大。

log.retention.bytes=-1默认设置,代表不限制Broker容量。

message.max.bytes=1000012默认还不到1MB,这个值需要进行调整,线上环境超过1MB的消息场景还是比较多的,设置一个比较大的值比较保险。

二、Topic级别参数

如果同时设置了Topic级别参数和全局Broker参数,以Topic级别参数为准,覆盖全局Broker参数

  • retention.ms:设置该Topic消息被保存的时间,默认是7天。一旦设置将会覆盖Broker的全局参数
  • retention.bytes:设置为该Topic预留多大的磁盘空间,默认为-1,不做限制。
  • max.message.bytes:如果公司的Kafka作为基础组件,上面跑的业务数据是比较多的,全局参数较难均衡,可以为每个Topic定制消息大小。

比如使用自带的命令kafka-configs来修改 Topic 级别参数,将发送最大值设置为10MB。

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

三、JVM参数

Kafka旧版本是用Scala语言编写的,新版本用Java语言,无论是哪个,终归会编译为class文件运行在JVM上,因此JVM参数对于Kafka集群相当重要。

JDK版本选择:JDK6已经太过陈旧了,并且在kafka2.0.0版本开始已经放弃了对JDK7的支持,所以建议至少使用JDK8。

:Kafka默认堆大小为1GB,这显然是不够的,Broker在和客户端交互时,会产生大量的ByteBuffer对象。业内公认较为合理的值为6GB。

GC:如果在使用JDK8,那么可以手动设置为G1收集器,在没有任何调优的情况下,G1的表现要比CMS出色,主要体现在更少的Full GC,需要调整的参数更少。

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

比如,在启动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。其实设置这个参数一点都不重要,但不设置的话后果很严重,比如你会经常看到“Too many open files”的错误。
  • 文件系统类型:文件系统指的是如 ext3、ext4 或 XFS 这样的日志型文件系统。根据官网的测试报告,XFS 的性能要强于 ext4,所以生产环境最好还是使用 XFS。
  • Swappiness:很多文章建议设置为0,将swap禁用避免Kafka进程使用swap空间。但是当物理内存耗尽时,操作系统会触发OOM killer,随机挑选一个进程然后kill掉,根本不给用户任何预警。
    但如果设置成一个比较小的值,当开始使用 swap 空间时,你至少能够观测到 Broker 性能开始出现急剧下降,从而给你进一步调优和诊断问题的时间。比如 1
  • 提交时间:即Flush落盘时间。向 Kafka 发送数据并不是真要等数据被写入磁盘才会认为成功,而是只要数据被写入到操作系统的页缓存(Page Cache)上就可以了,随后操作系统根据 LRU 算法会定期将页缓存上的“脏”数据落盘到物理磁盘上。这个定期就是由提交时间来确定的,默认是 5 秒。一般情况下我们会认为这个时间太频繁了,可以适当地增加提交间隔来降低物理磁盘的写操作。当然你可能会有这样的疑问:如果在页缓存中的数据在写入到磁盘前机器宕机了,那岂不是数据就丢失了。的确,这种情况数据确实就丢失了,但鉴于 Kafka 在软件层面已经提供了多副本的冗余机制,因此这里稍微拉大提交间隔去换取性能还是一个合理的做法。

原文地址:https://blog.csdn.net/weixin_44692700/article/details/126360894

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读4.1k次。kafka认证_kafka认证
文章浏览阅读4.8k次,点赞4次,收藏11次。kafka常用参数_kafka配置
文章浏览阅读1.4k次,点赞25次,收藏10次。Kafka 生产者发送消息的流程涉及多个步骤,从消息的创建到成功存储在 Kafka 集群中。_kafka发送消息流程
文章浏览阅读854次,点赞22次,收藏24次。点对点模型:适用于一对一的消息传递,具有高可靠性。发布/订阅模型:适用于广播消息给多个消费者,实现消息的广播。主题模型:适用于根据消息的主题进行灵活的过滤和匹配,处理复杂的消息路由需求。
文章浏览阅读1.5k次,点赞2次,收藏3次。kafka 自动配置在KafkaAutoConfiguration
文章浏览阅读1.3w次,点赞6次,收藏33次。Offset Explorer(以前称为Kafka Tool)是一个用于管理和使Apache Kafka ®集群的GUI应用程序。它提供了一个直观的UI,允许人们快速查看Kafka集群中的对象以及存储在集群主题中的消息。它包含面向开发人员和管理员的功能。二、环境信息系统环境:windows 10版本:2.2Kafka版本:Kafka2.0.0三、安装和使用3.1 下载Offset Explorer 和安装下载到本地的 .exe文件Next安装路径 ,Next。_offset explorer
文章浏览阅读1.3k次,点赞12次,收藏19次。kafka broker 在启动的时候,会根据你配置的listeners 初始化它的网络组件,用来接收外界的请求,这个listeners你可能没配置过,它默认的配置是listeners=PLAINTEXT://:9092就是告诉kafka使用哪个协议,监听哪个端口,如果我们没有特殊的要求的话,使用它默认的配置就可以了,顶多是修改下端口这块。
文章浏览阅读1.3k次,点赞2次,收藏2次。Kafka 是一个强大的分布式流处理平台,用于实时数据传输和处理。通过本文详细的介绍、使用教程和示例,你可以了解 Kafka 的核心概念、安装、创建 Topic、使用生产者和消费者,从而为构建现代分布式应用打下坚实的基础。无论是构建实时数据流平台、日志收集系统还是事件驱动架构,Kafka 都是一个可靠、高效的解决方案。_博客系统怎么使用kafka
文章浏览阅读3.5k次,点赞42次,收藏56次。对于Java开发者而言,关于 Spring ,我们一般当做黑盒来进行使用,不需要去打开这个黑盒。但随着目前程序员行业的发展,我们有必要打开这个黑盒,去探索其中的奥妙。本期 Spring 源码解析系列文章,将带你领略 Spring 源码的奥秘。本期源码文章吸收了之前 Kafka 源码文章的错误,将不再一行一行的带大家分析源码,我们将一些不重要的分当做黑盒处理,以便我们更快、更有效的阅读源码。废话不多说,发车!
文章浏览阅读1.1k次,点赞14次,收藏16次。一、自动提交offset1、概念Kafka中默认是自动提交offset。消费者在poll到消息后默认情况下,会自动向Broker的_consumer_offsets主题提交当前主题-分区消费的偏移量2、自动提交offset和手动提交offset流程图3、在Java中实现配置4、自动提交offset问题自动提交会丢消息。因为如果消费者还没有消费完poll下来的消息就自动提交了偏移量,那么此时消费者挂了,于是下一个消费者会从已经提交的offset的下一个位置开始消费消息。_kafka中自动提交offsets
文章浏览阅读1.6k次。如果生产者发送消息的速度超过发送到服务器的速度,则会导致生产者空间不足,这个时候KafkaProducer的send()方法调用要么被阻塞,要么抛出异常,这个取决于参数max.block.ms的配置,此参数的默认值为60000,即60秒。在默认情况下,生产者发送的消息是未经压缩的。如果应用程序调用send()方法的速度超过生产者将消息发送给服务器的速度,那么生产者的缓冲空间可能会被耗尽,后续的send()方法调用会等待内存空间被释放,如果在max.block.ms之后还没有可用空间,就抛出异常。_kafka producer 参数
文章浏览阅读2.9k次,点赞3次,收藏10次。kafka解决通信问题_kafka3.6
文章浏览阅读1.5k次,点赞9次,收藏11次。上面都配置完了之后可以先验证下,保证数据最终到ck,如果有问题,需要再每个节点调试,比如先调试nginx->rsyslog ,可以先不配置kafka 输出,配置为console或者文件输出都可以,具体这里就不写了。这里做了一个类型转换,因为nginx,request-time 单位是s,我想最终呈现在grafana 中是ms,所以这里做了转换,当然grafana中也可以做。kafka 相关部署这里不做赘述,只要创建一个topic 就可以。
文章浏览阅读1.4k次,点赞22次,收藏16次。Kafka中的enable-auto-commit和auto-commit-interval配置_auto-commit-interval
文章浏览阅读742次。thingsboard规则链调用外部 kafka_thingsboard kafka
文章浏览阅读1.3k次,点赞18次,收藏22次。Kafka_简介
文章浏览阅读1.1k次,点赞16次,收藏14次。在数据库系统中有个概念叫事务,事务的作用是为了保证数据的一致性,意思是要么数据成功,要么数据失败,不存在数据操作了一半的情况,这就是数据的一致性。在很多系统或者组件中,很多场景都需要保证数据的一致性,有的是高度的一致性。特别是在交易系统等这样场景。有些组件的数据不一定需要高度保证数据的一致性,比如日志系统。本节从从kafka如何保证数据一致性看通常数据一致性设计。
文章浏览阅读1.4k次。概述介绍架构发展架构原理类型系统介绍类型hive_table类型介绍DataSet类型定义Asset类型定义Referenceable类型定义Process类型定义Entities(实体)Attributes(属性)安装安装环境准备安装Solr-7.7.3安装Atlas2.1.0Atlas配置Atlas集成HbaseAtlas集成SolrAtlas集成KafkaAtlas Server配置Kerberos相关配置Atlas集成HiveAtlas启动Atlas使用Hive元数据初次导入Hive元数据增量同步。_atlas元数据管理
文章浏览阅读659次。Zookeeper是一个开源的分布式服务管理框架。存储业务服务节点元数据及状态信息,并负责通知再 ZooKeeper 上注册的服务几点状态给客户端。
文章浏览阅读1.4k次。Kafka-Kraft 模式架构部署_kafka kraft部署