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

这篇具有很好参考价值的文章主要介绍了《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 秒。
      • 一般情况下我们会认为这个时间太频繁了,可以适当地增加提交间隔来降低物理磁盘的写操作。

文章来源地址https://www.toymoban.com/news/detail-507204.html

到了这里,关于《kafka 核心技术与实战》课程学习笔记(五)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Redis 核心技术与实战》课程学习笔记(四)

    一旦服务器宕机,内存中的数据将全部丢失。目前,Redis 的持久化主要有两大机制,即 AOF 日志和 RDB 快照。 AOF 日志是如何实现的? 我们比较熟悉的是数据库的写前日志(Write Ahead Log, WAL),也就是说,在实际写数据前,先把修改的数据记到日志文件中,以便故障时进行恢复

    2024年02月12日
    浏览(46)
  • 《Redis 核心技术与实战》课程学习笔记(三)

    Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。 多线程的开销 我们刚开始增加线程数时,系统吞吐率

    2024年02月12日
    浏览(45)
  • 《Redis 核心技术与实战》课程学习笔记(六)

    在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制。 哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主(选择主库)和通知。 监控 哨兵进程在运行时,周期性地给所有的主从库

    2024年02月13日
    浏览(43)
  • 《Redis 核心技术与实战》课程学习笔记(五)

    那我们总说的 Redis 具有高可靠性,又是什么意思呢? 其实,这里有两层含义:一是数据尽量少丢失,二是服务尽量少中断。 AOF 和 RDB 保证了前者,而对于后者,Redis 的做法就是增加副本冗余量,将⼀份数据同时保存在多个实例上。 即使有一个实例出现了故障,需要过一段时

    2024年02月13日
    浏览(55)
  • 《Redis 核心技术与实战》课程学习笔记(一)

    为了保证数据的可靠性,Redis 需要在磁盘上读写 AOF 和 RDB,但在高并发场景里,这就会直接带来两个新问题: 一个是写 AOF 和 RDB 会造成 Redis 性能抖动; 另一个是 Redis 集群数据同步和实例恢复时,读 RDB 比较慢,限制了同步和恢复速度。 其实,一个可行的解决方案就是使用

    2024年02月12日
    浏览(59)
  • 《MySQL 实战 45 讲》课程学习笔记(四)

    索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。 哈希表 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。 哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位

    2024年02月14日
    浏览(48)
  • 《Kubernetes入门实战课》课程学习笔记(一)

    现在 Kubernetes 已经没有了实际意义上的竞争对手,它的地位就如同 Linux 一样,成为了事实上的云原生操作系统,是构建现代应用的基石。 现代应用是什么? 是微服务,是服务网格,这些统统要围绕着容器来开发、部署和运行。 使用容器就必然要用到容器编排技术,在现在只

    2024年02月17日
    浏览(74)
  • 唐宇迪机器学习实战课程笔记(全)

    机器学习模型的参数,不是直接数学求解,而是利用数据,进行迭代epoch,梯度下降优化求解。 目标:更好的拟合连续函数(分割连续样本空间的平面h(·)) ε ( i ) varepsilon^{(i)} ε ( i ) 是 真实值 y ( i ) y^{(i)} y ( i ) 与 预测值 h θ ( x ) = θ T x ( i ) h_theta (x)=theta^Tx^{(i)} h θ ​ ( x )

    2024年02月16日
    浏览(46)
  • 【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(一)

    课程地址: 黑马程序员HarmonyOS4+NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 1 - 2节) 开场白,HarmonyOS 的一个简介,话不多说,直接看图吧! 工欲善其事必先利其器,开发准备需要两件事:1、开发文档;2、开发工具 打开鸿蒙官方网站,

    2024年04月24日
    浏览(46)
  • 北大肖臻老师《区块链技术与应用》系列课程学习笔记[27]以太坊-反思

    目录 一、智能合约的反思         1.Is smart contract really smart?         2. Irrevocability is a double edged sword.         3. Nothing is irrevocable. 二、语言设计上的反思         1.Is solidity the right programming language?         2.编写智能合约的语言应该有什么样的表达力? 三

    2024年01月20日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包