MSK有很多参数可以自定义配置,例如auto.create.topics.enable
、min.insync.replicas
。
在创建MSK时,默认使用了Default configuration:
这些参数的默认值在 https://docs.aws.amazon.com/msk/latest/developerguide/msk-default-configuration.html 文档可以找到。
当然在创建集群完成后,我们也可以随时对这些参数做更新。想要更改这些参数,一般有三种方式:
kafka-configs.sh
命令行。Custom configurations
在对Kafka的这些参数做更新时,如果需要Broker重启才能生效,会触发MSK的rolling update机制, 不会对线上业务造成中断
参考文档: https://kafka.apache.org/documentation/#dynamicbrokerconfigs
使用kafka-configs.sh
对参数进行更新时,有三种情况:
read-only
: 需要broker重启per-broker
: 需要在每个broker上进行配置,动态更新不需要重启broker。cluster-wide
: 在集群级别生效,动态更新不需要重启broker。也可以选择在某个broker上生效,以进行测试在文档中搜索参数名称,可以找到它是属于上面哪一种模式:
在本节中,我们将使用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的自定义配置为空:
设置 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
上面的命令行仅对一个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
很多Kafka的UI工具都带有设置自定义参数的功能
在第一章中我们部署了AKHQ UI 工具,这个工具也可以对Broker或topic做一些参数配置:
参考: https://docs.aws.amazon.com/msk/latest/developerguide/msk-configuration-properties.html
在集群创建时或创建完成后都可以使用Custom Configuration
来对集群的一些参数做更新。
在本节中,我们将MSK集群的auto.create.topics.enable
参数使用Custom Configuration
设置成true:
创建新的参数配置:
将auto.create.topics.enable
设置为true,然后进行创建。
创建完成后,回到上一个界面,使用刚才创建的配置:
保存更改,过一段时间后集群更新完成。
auto.create.topics.enable
: 在MSK中默认为false。如果设置为true,那么当生产者向一个尚未创建的topic发送消息时,会自动创建对应topic。不过一般不建议在生产环境将auto.create.topics.enable
参数设置为true,因为这个参数会影响topic的管理与维护。在测试环境可以设置为true
default.replication.factor
、num.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路径保存到消息里。