07 | 最最最重要的集群参数配置(上)


Kafka 核心技术与实战

Kafka的基本使用

07 | 最最最重要的集群参数配置(上)

Broker 端参数也被称为静态参数(Static Configs)。所谓静态参数,是指必须在 Kafka 的配置文件 server.properties 中进行设置的参数,不管是新增、修改还是删除。同时,必须重启 Broker 进程才能令它们生效。而主题级别参数的设置则有所不同,Kafka 提供了专门的 kafka-configs 命令来修改它们。

Broker 端参数

Broker 是需要配置存储信息的,即 Broker 使用哪些磁盘。那么针对存储信息的重要参数有以下这么几个:

  • log.dirs:指定了 Broker 需要使用的若干个文件目录路径。这个参数是没有默认值的,必须亲自指定。
  • log.dir:注意这是 dir,结尾没有 s,说明它只能表示单个路径,它是补充上一个参数用的。

只要设置log.dirs就好了,不要设置log.dir。在线上生产环境中一定要为 log.dirs 配置多个路径,用逗号分隔的多个路径,比如 /home/kafka1,/home/kafka2,/home/kafka3。有条件的话,最好保证这些目录挂载到不同的物理磁盘上,可以提升读写性能和实现故障转移(Failover)。

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

zookeeper.connect

  • 一套 Kafka 集群,可以指定它的值为 zk1:2181,zk2:2181,zk3:2181;
  • 多套Kafka集群,可以指定它的值为 zk1:2181,zk2:2181,zk3:2181/kafka1和zk1:2181,zk2:2181,zk3:2181/kafka2。

与 Broker 连接相关的,即客户端程序或其他 Broker 如何与该 Broker 进行通信的设置。有以下三个参数:

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

listeners 用于内网访问,advertised.listeners 用于外网访问。

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

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

主机名这个设置中建议最好全部使用主机名,即 Broker 端和 Client 端应用配置中全部填写主机名。 Broker 源代码中也使用的是主机名,如果某些地方使用了 IP 地址进行连接,可能会发生无法连接的问题。

关于 Topic 管理的,有下面这三个参数:

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

auto.create.topics.enable 参数建议最好设置成 false,即不允许自动创建 Topic。在线上环境里面有很多名字稀奇古怪的 Topic,大概都是因为该参数被设置成了 true 的缘故。

unclean.leader.election.enable 是关闭 Unclean Leader 选举的。如果设置成 false,即坚决不能让那些落后太多的副本竞选 Leader。建议把它设置成 false。

auto.leader.rebalance.enable 设置它的值为 true 表示允许 Kafka 定期地对一些 Topic 分区进行 Leader 重选举。严格来说它与上一个参数中 Leader 选举的最大不同在于,它不是选 Leader,而是换 Leader!比如 Leader A 一直表现得很好,但若auto.leader.rebalance.enable=true,那么有可能一段时间后 Leader A 就要被强行卸任换成 Leader B。换一次 Leader 代价很高的,因此建议在生产环境中把这个参数设置成 false。

数据留存方面的参数如下:

  • log.retention.{hours|minutes|ms}:这是个“三兄弟”,都是控制一条消息数据被保存多长时间。从优先级上来说 ms 设置最高、minutes 次之、hours 最低。
  • log.retention.bytes:这是指定 Broker 为消息保存的总磁盘容量大小,默认是 -1,表示不设上限。
  • message.max.bytes:控制 Broker 能够接收的最大消息大小。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久违の欢喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值