配置MeterSphere自带的3.x版本kafka为kraft集群模式


Administrator
飞致云 发布于 2022-11-03 / 500 阅读 / 0 评论 /
简介Kafka3.0之前的架构:元数据在zookeeper中,运行时动态选举controller,由controller进行Kafka集群管理。 kraft模式架构:不再依赖zookeeper集群,而是用三台controller节点代替zookeeper,元数据保存在 controller中, 由c

简介

Kafka3.0之前的架构:元数据在zookeeper中,运行时动态选举controller,由controller进行Kafka集群管理。 kraft模式架构:不再依赖zookeeper集群,而是用三台controller节点代替zookeeper,元数据保存在 controller中, 由controller直接进行Kafka集群管理。

kraft架构的优势

1、Kafka不再依赖外部框架,而是能够独立运行。
2、controller管理集群时,不再需要从zookeeper中先读取数据,集群性能上升。
3、由于不依赖zookeeper,集群扩展时不再受到zookeeper读写能力限制controller 不再动态选举,而是由配置文件规定。 这样我们可以有针对性的加强controller 节点的配置。
4、后续版本升级方便,不用和zookeeper一起维护。

MeterSphere多个节点时,如何配置自带的kafka为集群模式(非外置kafka)

一、docker-compose-kafka.yml配置

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。

  1. KAFKA_BROKER_ID配置
    三个节点的docker-compose-kafka.yml文件中,KAFKA_BROKER_ID值分别为1、2、3。
    image-1667469249544
    image-1667469254427
    image-1667469259093
  2. KAFKA_CFG_ADVERTISED_LISTENERS配置
    这个配置是broker对外暴露的地址,需要填写每个节点真实的ip和端口。这里写死了,没有引用环境变量。
    image-1667469285201
  3. KAFKA_CFG_CONTROLLER_QUORUM_VOTERS配置
    这个是所有的controller列表,三个配置文件都填一样。格式:1@ip1:9093,2@ip2:9093,3@ip3:9093。
    image-1667469316204
  4. ports配置
    docker-compose-kafka.yml文件中,默认没有对外暴露9093端口,所以需要手动修改,暴露出来。
    image-1667469333962
  5. KAFKA_KRAFT_CLUSTER_ID配置
    必须给集群配置一个集群ID,否则会报错:Unexpected error INCONSISTENT_CLUSTER_ID in VOTE response: InboundResponse。
    默认没有该配置,所以需要手动添加,三个节点的配置保持一致。
    image-1667469353696

二、docker-compose-server.yml配置

  1. KAFKA_BOOTSTRAP-SERVERS配置
    这里要配置多个kafka地址,service:ms-server和service:ms-data-streaming中都要修改该配置,格式:ip1:9092,ip2:9092,ip3:9092。
    image-1667469414205
    image-1667469421410

三、.env文件配置

  1. 保持默认配置
    image-1667469454338
    依然使用内置kafka,保持MS_EXTERNAL_KAFKA=false,只是在docker-compose-kafka.yml和docker-compose-server.yml中kafka相关参数都写死了,没有引用.env中的环境变量。
    以上内容配置好之后,使用msctl reload命令重新加载配置文件,即可创建kraft集群。
    image-1667469467880
    image-1667469472771
    image-1667469476926


是否对你有帮助?