MSK自定义配置

MSK有很多参数可以自定义配置,例如auto.create.topics.enablemin.insync.replicas

在创建MSK时,默认使用了Default configuration:

image-20220206172408590

这些参数的默认值在 https://docs.aws.amazon.com/msk/latest/developerguide/msk-default-configuration.html 文档可以找到。


当然在创建集群完成后,我们也可以随时对这些参数做更新。想要更改这些参数,一般有三种方式:

  1. 使用kafka-configs.sh命令行。
  2. 使用UI工具(本节以AKHQ做示例)
  3. 使用MSK的Custom configurations

在对Kafka的这些参数做更新时,如果需要Broker重启才能生效,会触发MSK的rolling update机制, 不会对线上业务造成中断

kafka-configs CLI

参考文档: https://kafka.apache.org/documentation/#dynamicbrokerconfigs

使用kafka-configs.sh对参数进行更新时,有三种情况:

  • read-only: 需要broker重启
  • per-broker: 需要在每个broker上进行配置,动态更新不需要重启broker。
  • cluster-wide: 在集群级别生效,动态更新不需要重启broker。也可以选择在某个broker上生效,以进行测试

在文档中搜索参数名称,可以找到它是属于上面哪一种模式:

image-20220206173851696


在本节中,我们将使用kafka-configs.sh来对log.cleaner.threads的值进行更新。

查看broker 1上有哪些自定义配置:

export KAFKA=$(aws kafka get-bootstrap-brokers --cluster-arn arn:aws:kafka:ap-southeast-1:145197526627:cluster/MSKDemo/89d04308-2643-4e80-b6e2-fe996354f056-4 --query BootstrapBrokerString --output text)  # 将cluster-arn根据实际情况做替换

# describe configs for broker 1
kafka-configs --bootstrap-server $KAFKA --entity-type brokers --entity-name 1 --describe

默认情况下,MSK的自定义配置为空:

image-20220206174448231

设置 broker 1的log.cleaner.threads=2:

# alter configs for broker 1
kafka-configs --bootstrap-server $KAFKA --entity-type brokers --entity-name 1 --alter --add-config log.cleaner.threads=2

重新查看broker 1上有哪些自定义配置:

# cluster wide describe
kafka-configs --bootstrap-server $KAFKA --entity-type brokers --entity-default --describe

image-20220206174704740

上面的命令行仅对一个broker生效,也可以将log.cleaner.threads=2对整个集群生效:

# cluster wide alter
kafka-configs --bootstrap-server $KAFKA --entity-type brokers --entity-default --alter --add-config log.cleaner.threads=2

# 查看集群级别的自定义配置
kafka-configs --bootstrap-server $KAFKA --entity-type brokers --entity-default --describe

image-20220206174831072

使用UI工具

很多Kafka的UI工具都带有设置自定义参数的功能

在第一章中我们部署了AKHQ UI 工具,这个工具也可以对Broker或topic做一些参数配置:

image-20220206182955195

使用MSK Custom Configurations

参考: https://docs.aws.amazon.com/msk/latest/developerguide/msk-configuration-properties.html

在集群创建时或创建完成后都可以使用Custom Configuration来对集群的一些参数做更新。

在本节中,我们将MSK集群的auto.create.topics.enable参数使用Custom Configuration设置成true:

image-20220206184532788

创建新的参数配置:

image-20220206184405872

auto.create.topics.enable设置为true,然后进行创建。

image-20220206184654125

创建完成后,回到上一个界面,使用刚才创建的配置:

image-20220206184800536

保存更改,过一段时间后集群更新完成。

一些重要配置参数的说明

  • auto.create.topics.enable: 在MSK中默认为false。如果设置为true,那么当生产者向一个尚未创建的topic发送消息时,会自动创建对应topic。不过一般不建议在生产环境将auto.create.topics.enable参数设置为true,因为这个参数会影响topic的管理与维护。在测试环境可以设置为true

  • default.replication.factornum.partitions:当auto.create.topics.enable=true,生产者向一个尚未创建的topic发送消息时,会自动创建一个num.partitions个分区和default.replication.factor个副本的对应topic

  • delete.topic.enable: 控制是否可以删除topic。如果没有做权限控制,建议在生产环境下将其设置为false

  • log.retention.hours: 日志保留时间,默认为168h。对于不重要的topic,可以将其保留时间调小以节省磁盘空间

  • message.max.bytes:最大发送消息体的大小,默认是1M。不过不建议更改这个值,对于大消息体,可以将其上传到S3, 并把S3路径保存到消息里。