专栏首页用户4352451的专栏kafka集群重要的参数配置(三)

kafka集群重要的参数配置(三)

Broker端的参数

  • log.dirs:这是非常重要的参数,指定了 Broker 需要使用的若干个文件目录路径。要知道这个参数是没有默认值的,这说明什么?这说明它必须由你亲自指定。
  • log.dir:注意这是 dir,结尾没有 s,说明它只能表示单个路径,它是补充上一个参数用的。 只要设置log.dirs,即第一个参数就好了,不要设置log.dir。而且更重要的是,在线上生产环境中一定要为log.dirs配置多个路径,具体格式是一个 CSV 格式,也就是用逗号分隔的多个路径,比如/home/kafka1,/home/kafka2,/home/kafka3这样。最好保证这些目录挂载到不同的物理磁盘上。这样做有两个好处:提升读写性能:比起单块磁盘,多块物理磁盘同时读写数据有更高的吞吐量。能够实现故障转移:即 Failover。
  • auto.create.topics.enable:是否允许自动创建 Topic,设置为fasle因为一般生产环境产生很没见过的topic就是应为这个参数导致的
  • unclean.leader.election.enable 当同步数据比较多的副本都宕机了,而只剩下几个同步数据不多的副本选举是否进行leader选举的开关,由于kafka的有几个版本对这几个值的设置不一样,有的是默认fasle 有的是true。所以我们在使用的时候默认给false。如果开着就会产生数据丢失的问题
  • auto.leader.rebalance.enable: 是否定期对kafka的topic分区进行leader重选举,如果是true 就会导致leader A在这段时间表现很好但是由于要leader重选举将B换上来,这个是相当耗费性能的。所以还是设置为fasle
  • log.retention.{hours|minutes|ms}: 控制一条消息被保存的得时间。如log.retention.hours=168表示消息被存储的时间,这个时间根据自己的实际需求来设置。
  • log.retention.bytes: 这是指定 Broker 为消息保存的总磁盘容量大小这个值默认是 -1意思是保存多大的数据都是OK。看自己需求定
  • message.max.bytes:控制 Broker 能够接收的最大消息大小。默认的 1000012 太少了,还不到 1MB。实际场景中突破 1MB 的消息都是屡见不鲜的,因此在线上环境中设置一个比较大的值还是比较保险的做法。毕竟它只是一个标尺而已,仅仅衡量 Broker 能够处理的最大消息大小,即使设置大一点也不会耗费什么磁盘空间的。
  • listeners:学名叫监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。
  • advertised.listeners:和 listeners 相比多了个 advertised。Advertised 的含义表示宣称的、公布的,就是说这组监听器是 Broker 用于对外发布的。

我们具体说说监听器的概念,从构成上来说,它是若干个逗号分隔的三元组,每个三元组的格式为<协议名称,主机名,端口号>。这里的协议名称可能是标准的名字,比如 PLAINTEXT 表示明文传输、SSL 表示使用 SSL 或 TLS 加密传输等;也可能是你自己定义的协议名字,比如CONTROLLER: //localhost:9092。

一旦你自己定义了协议名称,你必须还要指定listener.security.protocol.map参数告诉这个协议底层使用了哪种安全协议,比如指定listener.security.protocol.map=CONTROLLER:PLAINTEXT表示CONTROLLER这个自定义协议底层使用明文不加密传输数据。

至于三元组中的主机名和端口号则比较直观,不需要做过多解释。不过有个事情你还是要注意一下,经常有人会问主机名这个设置中我到底使用 IP 地址还是主机名。这里我给出统一的建议:最好全部使用主机名,即 Broker 端和 Client 端应用配置中全部填写主机名。 Broker 源代码中也使用的是主机名,如果你在某些地方使用了 IP 地址进行连接,可能会发生无法连接的问题。

参考极客时间: kafka技术核心和实战 https://time.geekbang.org/column/intro/191

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入理解分布式锁

    分布式锁是实现有序调度不同的进程,解决分布式系统下不同进程之间相互干扰的问题的技术手段

    居士
  • 细品redis的Scan和Keys命令

    抽象一点说,假设开始槽位的二进制数是 xxx,那么该槽位中的元素将被 rehash 到 0xxx 和 1xxx(xxx+8) 中。 如果字典长度由 16 位扩...

    居士
  • redis keys和scan命令

    1.自1.0.0起可用。 时间复杂度: O(N),其中N为数据库中密钥的数目,假设数据库中的密钥名称和给定模式的长度有限。 返回所有匹配的键pattern。

    居士
  • 2018-09-26 -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or dir...

    -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file ...

    Albert陈凯
  • 用一道大厂面试题带你搞懂事件循环机制

    面试题如下,大家可以先试着写一下输出结果,然后再看我下面的详细讲解,看看会不会有什么出入,如果把整个顺序弄清楚 Node.js 的执行顺序应该就没问题了。

    桃翁
  • 用什么语言的程序员最抢手?招聘网站数据告诉你,Python都没进前五

    昨天,美国程序员招聘网站Hired发布的《2019软件工程师状态》报告中指出,基于市场供需来说,Go语言使用者目前最受招聘市场欢迎。

    量子位
  • 用一道大厂面试题带你搞懂事件循环机制

    面试题如下,大家可以先试着写一下输出结果,然后再看我下面的详细讲解,看看会不会有什么出入,如果把整个顺序弄清楚 Node.js 的执行顺序应该就没问题了。

    前端迷
  • [答疑]EA怎么隐藏图上的页面分割线

    用户6288414
  • 一道面试题引发的事件循环深入思考

    面试题如下,大家可以先试着写一下输出结果,看与正确答案是否有出入,如果大家不能准确的做出答案,可以通过下面对微任务,事件循环,定时器等相关代码执行顺序的讲解,让...

    coder_koala
  • ES6之变量的解构赋值

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。解构赋值在一些场景下还是很有用的。

    wade

扫码关注云+社区

领取腾讯云代金券