这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战
上一篇记录了 Kafka 中几个重要的 Broker 端参数,这些参数都配置在 config/server.properties 中,对整个 Broker 生效。但是,针对不同业务的消息数据,我们通常需要为不同的 Topic 设置不同的参数,对于提供租户服务的 Kafka 集群更是如此。
如何配置 Topic 级别的参数
在 Kafka 中,Topic 级别的参数可以在创建 Topic 的时候配置,也可以在修改 Topic 的时候进行配置。
在创建 Topic 的时候,可以使用 --config 来配置,--config 后面指定需要设置的 Topic 级别参数,每个参数都需要跟在一个 --config 后面。
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic hello_events --partitions 1 --replication-factor 1 --config retention.ms=15552000000 --config max.message.bytes=5242880
修改配置参数的方法是使用 bin/kafka-configs.sh 命令。
bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name hello_events --alter --add-config max.message.bytes=10485760
在这两种方法中,推荐使用第二种。
值得注意的是,一旦设置的 Topic 级别的参数,那么,对于当前对应的 Topic 而言,Broker 级别的参数就被覆盖了。也就是,Topic 级别的参数优先级更高。
几个重要的 Topic 级别参数
在 Topic 级别的参数重,有几个常用且重要的参数。
retention.ms
这个参数指定了当前 Topic 的消息最长被保留多长时间。Kafka 提供的默认值是 7 天,也就是说,这个 Topic 中只保留最近 7 天的消息数据,它的单位是毫秒,也就是,上面的例子中的 retention.ms=15552000000 将数据的保留市场设置成了 180 天。
retention.bytes
这个参数指定了 Topic 最多可占用的磁盘空间。对于多个系统使用同一个 Kafka 集群作为消息系统,或者对于提供了租户服务的 Kafka 集群,这个参数非常实用。这个参数的默认值是 -1,代表可以无限制地占用磁盘空间。从配置名称中可以看出它的单位是 byte。
max.message.bytes
这个参数指定了 Kafka Broker 能够正常接收当前 Topic 的最大消息大小,单位也是 byte,对于不同的业务,要处理的消息差别有时非常大,因此对于不同的 Topic,给这个参数设置合理的值非常重要,这也是服务多个业务的 Kafka 集群配置中,比较实用的一个参数。