kafka(kraft模式)3.*集群容器部署 docker-compose
一、创建yml文件
要修改部分
1.修改宿主机ip KAFKA_CFG_ADVERTISED_LISTENERS
2.修改挂载路径
version: "3.6" services: kafka1: container_name: kafka1 image: 'bitnami/kafka:3.3.1' user: root ports: - '19092:9092' - '19093:9093' environment: # 允许使用Kraft - KAFKA_ENABLE_KRAFT=yes - KAFKA_CFG_PROCESS_ROLES=broker,controller - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER # 定义kafka服务端socket监听端口(Docker内部的ip地址和端口) - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 # 定义安全协议 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT #定义外网访问地址(宿主机ip地址和端口) - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://1.1.1.1:19092 - KAFKA_BROKER_ID=1 - KAFKA_KRAFT_CLUSTER_ID=iZWRiSqjZAlYwlKEqHFQWI - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.23.0.11:9093,2@172.23.0.12:9093,3@172.23.0.13:9093 - ALLOW_PLAINTEXT_LISTENER=yes # 设置broker最大内存,和初始内存 - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M volumes: - /opt/volume/kafka/broker01:/bitnami/kafka:rw networks: netkafka: ipv4_address: 172.23.0.11 kafka2: container_name: kafka2 image: 'bitnami/kafka:3.3.1' user: root ports: - '29092:9092' - '29093:9093' environment: - KAFKA_ENABLE_KRAFT=yes - KAFKA_CFG_PROCESS_ROLES=broker,controller - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://1.1.1.1:29092 #修改宿主机ip - KAFKA_BROKER_ID=2 - KAFKA_KRAFT_CLUSTER_ID=iZWRiSqjZAlYwlKEqHFQWI #哪一,三个节点保持一致 - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.23.0.11:9093,2@172.23.0.12:9093,3@172.23.0.13:9093 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M volumes: - /opt/volume/kafka/broker02:/bitnami/kafka:rw networks: netkafka: ipv4_address: 172.23.0.12 kafka3: container_name: kafka3 image: 'bitnami/kafka:3.3.1' user: root ports: - '39092:9092' - '39093:9093' environment: - KAFKA_ENABLE_KRAFT=yes - KAFKA_CFG_PROCESS_ROLES=broker,controller - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://1.1.1.1:39092 #修改宿主机ip - KAFKA_BROKER_ID=3 - KAFKA_KRAFT_CLUSTER_ID=iZWRiSqjZAlYwlKEqHFQWI - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.23.0.11:9093,2@172.23.0.12:9093,3@172.23.0.13:9093 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M volumes: - /opt/volume/kafka/broker03:/bitnami/kafka:rw networks: netkafka: ipv4_address: 172.23.0.13 networks: name: netkafka: driver: bridge name: netkafka ipam: driver: default config: - subnet: 172.23.0.0/25 gateway: 172.23.0.1 #kafka图形 有需要时部署 # kafka-manager: # container_name: kafka-manager # image: sheepkiller/kafka-manager # ports: # - 9020:9000 # environment: # ZK_HOSTS: zookeeper:2181
二、启动
docker-compose -f kafka.yml up -d
三、测试
#3.1进入容器 docker exec -it kafka1 bash #3.2进入kafka目录 cd /opt/bitnami/kafka/bin #3.3 创建Topic #创建一个副本为3、分区为5的topic ./kafka-topics.sh --create --topic foo --partitions 5 --replication-factor 3 --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092 Created topic foo. #查看topic详细信息 kafka-topics.sh --describe --topic foo --bootstrap-server kafka1:9092, kafka2:9092, kafka3:9092 Topic: foo TopicId: 83kWG4PUT9u4fOzG5WgFoA PartitionCount: 5 ReplicationFactor: 3 Configs: Topic: foo Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2 Topic: foo Partition: 1 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Topic: foo Partition: 2 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Topic: foo Partition: 3 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1 Topic: foo Partition: 4 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3 #3.4生产和消费验证 #开出量个窗口 进到相同容器相同目录 kafka1生产:kafka-console-producer.sh --broker-list 172.23.0.11:9092,172.23.0.12:9092,172.23.0.13:9092 --topic foo kafka2和kafka3消费:kafka-console-consumer.sh --bootstrap-server 172.23.0.11:9092,172.23.0.12:9092,172.23.0.13:9092 --topic foo #3.5删除Topic kafka-topics.sh --delete --topic foo --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092