简介 {#%E7%AE%80%E4%BB%8B}
Kafka3.0之前的架构:元数据在zookeeper中,运行时动态选举controller,由controller进行Kafka集群管理。 kraft模式架构:不再依赖zookeeper集群,而是用三台controller节点代替zookeeper,元数据保存在 controller中, 由controller直接进行Kafka集群管理。
kraft架构的优势 {#kraft%E6%9E%B6%E6%9E%84%E7%9A%84%E4%BC%98%E5%8A%BF}
1、Kafka不再依赖外部框架,而是能够独立运行。
2、controller管理集群时,不再需要从zookeeper中先读取数据,集群性能上升。
3、由于不依赖zookeeper,集群扩展时不再受到zookeeper读写能力限制controller 不再动态选举,而是由配置文件规定。 这样我们可以有针对性的加强controller 节点的配置。
4、后续版本升级方便,不用和zookeeper一起维护。
MeterSphere多个节点时,如何配置自带的kafka为集群模式(非外置kafka) {#metersphere%E5%A4%9A%E4%B8%AA%E8%8A%82%E7%82%B9%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%E8%87%AA%E5%B8%A6%E7%9A%84kafka%E4%B8%BA%E9%9B%86%E7%BE%A4%E6%A8%A1%E5%BC%8F%EF%BC%88%E9%9D%9E%E5%A4%96%E7%BD%AEkafka%EF%BC%89}
一、docker-compose-kafka.yml配置 {#%E4%B8%80%E3%80%81docker-compose-kafka.yml%E9%85%8D%E7%BD%AE}
version: "2.1"
services:
kafka:
image: '${MS_IMAGE_PREFIX}/kafka:3.2.0'
container_name: kafka
ports:
- '${MS_KAFKA_PORT}:${MS_KAFKA_PORT}'
healthcheck:
test: ["CMD", "bash", "-c", "< /dev/tcp/localhost/9093"]
interval: 6s
timeout: 10s
retries: 20
restart: always
environment:
KAFKA_ENABLE_KRAFT: 'yes'
KAFKA_BROKER_ID: 1
ALLOW_PLAINTEXT_LISTENER: 'yes'
KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://${MS_KAFKA_HOST}:${MS_KAFKA_PORT}
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@127.0.0.1:9093
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
KAFKA_CFG_PROCESS_ROLES: broker,controller
KAFKA_CFG_LOG_RETENTION_HOURS: 64
KAFKA_CFG_MAX_REQUEST_SIZE: 52428800
KAFKA_CFG_MESSAGE_MAX_BYTES: 52428800
KAFKA_CFG_REPLICA_FETCH_MAX_BYTES: 52428800
KAFKA_CFG_FETCH_MESSAGE_MAX_BYTES: 52428800
KAFKA_CFG_PARTITION_FETCH_BYTES: 52428800
FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS: 'true'
networks:
- ms-network
ms-data-streaming:
depends_on:
kafka:
condition: service_healthy
以v2.1.0版本为例,KAFKA_ENABLE_KRAFT: 'yes',默认允许kraft集群模式,我们只需要把其他节点加入到集群中即可。需要修改的配置项包括KAFKA_CFG_ADVERTISED_LISTENERS、KAFKA_CFG_CONTROLLER_QUORUM_VOTERS、KAFKA_BROKER_ID、ports。需要添加的配置项包括KAFKA_KRAFT_CLUSTER_ID。
- KAFKA_BROKER_ID配置
三个节点的docker-compose-kafka.yml文件中,KAFKA_BROKER_ID值分别为1、2、3。
- KAFKA_CFG_ADVERTISED_LISTENERS配置
这个配置是broker对外暴露的地址,需要填写每个节点真实的ip和端口。这里写死了,没有引用环境变量。
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS配置
这个是所有的controller列表,三个配置文件都填一样。格式:1@ip1:9093,2@ip2:9093,3@ip3:9093。
- ports配置
docker-compose-kafka.yml文件中,默认没有对外暴露9093端口,所以需要手动修改,暴露出来。
- KAFKA_KRAFT_CLUSTER_ID配置
必须给集群配置一个集群ID,否则会报错:Unexpected error INCONSISTENT_CLUSTER_ID in VOTE response: InboundResponse。
默认没有该配置,所以需要手动添加,三个节点的配置保持一致。
二、docker-compose-server.yml配置 {#%E4%BA%8C%E3%80%81docker-compose-server.yml%E9%85%8D%E7%BD%AE}
- KAFKA_BOOTSTRAP-SERVERS配置
这里要配置多个kafka地址,service:ms-server和service:ms-data-streaming中都要修改该配置,格式:ip1:9092,ip2:9092,ip3:9092。
三、.env文件配置 {#%E4%B8%89%E3%80%81.env%E6%96%87%E4%BB%B6%E9%85%8D%E7%BD%AE}
- 保持默认配置
依然使用内置kafka,保持MS_EXTERNAL_KAFKA=false,只是在docker-compose-kafka.yml和docker-compose-server.yml中kafka相关参数都写死了,没有引用.env中的环境变量。
以上内容配置好之后,使用msctl reload命令重新加载配置文件,即可创建kraft集群。