(安装docker、docker-compose 略过,请参考docker安装文档

pull相关服务镜像

  1. docker pull canal/canal-server
  2. docker pull canal/canal-admin
  3. docker pull zookeeper
  4. docker pull sheepkiller/kafka-manager
  5. docker pull wurstmeister/kafka
  6. docker pull portainer/portainer
  7. docker pull rabbitmq
  8. docker pull rabbitmq:management

创建docker-compose文件夹

  1. mkdir -p /data/docker-containers/zk-kafka-server
  2. mkdir /data/docker-containers/zk-kafka-server/kafka{1,2,3}/logs -p
  3. mkdir -p /data/docker-containers/zk-kafka-server/zoo{1,2,3}/data
  4. mkdir -p /data/docker-containers/zk-kafka-server/zoo{1,2,3}/datalog

创建YAML配置文件

  1. cd /data/docker-containers/zk-kafka-server
  2. vim docker-compose.yaml
  3. ---
  4. ## by author:albert-dong
  5. version: '3.6'
  6. services:
  7. zoo1:
  8. image: zookeeper
  9. restart: always
  10. hostname: zoo1
  11. container_name: zoo1
  12. ports:
  13. - 2181:2181
  14. volumes:
  15. - "$PWD/zoo1/zk-conf/zoo.cfg:/conf/zoo.cfg"
  16. - "./zoo1/data:/data"
  17. - "./zoo1/datalog:/datalog"
  18. environment:
  19. ZOO_MY_ID: 1
  20. ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
  21. networks:
  22. default:
  23. ipv4_address: 172.27.0.11
  24. zoo2:
  25. image: zookeeper
  26. restart: always
  27. hostname: zoo2
  28. container_name: zoo2
  29. ports:
  30. - 2180:2181
  31. volumes:
  32. - "$PWD/zoo1/zk-conf/zoo.cfg:/conf/zoo.cfg"
  33. - "./zoo2/data:/data"
  34. - "./zoo2/datalog:/datalog"
  35. environment:
  36. ZOO_MY_ID: 2
  37. ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zoo3:2888:3888
  38. networks:
  39. default:
  40. ipv4_address: 172.27.0.12
  41. zoo3:
  42. image: zookeeper
  43. restart: always
  44. hostname: zoo3
  45. container_name: zoo3
  46. ports:
  47. - 2179:2181
  48. volumes:
  49. - "$PWD/zoo1/zk-conf/zoo.cfg:/conf/zoo.cfg"
  50. - "./zoo3/data:/data"
  51. - "./zoo3/datalog:/datalog"
  52. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
  53. environment:
  54. ZOO_MY_ID: 3
  55. ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=0.0.0.0:2888:3888
  56. #KAFKA_ADVERTISED_HOST_NAME: 192.168.199.207
  57. networks:
  58. default:
  59. ipv4_address: 172.27.0.13
  60. kafka1:
  61. image: wurstmeister/kafka
  62. restart: always
  63. container_name: kafka1
  64. hostname: kafka1
  65. ports:
  66. - 9092:9092
  67. - 9999:9999
  68. environment:
  69. #KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.161.62:9092 # 暴露在外的地址
  70. KAFKA_ADVERTISED_HOST_NAME: kafka1 #
  71. KAFKA_HOST_NAME: kafka1
  72. KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
  73. KAFKA_ADVERTISED_PORT: 9092 # 暴露在外的端口
  74. KAFKA_BROKER_ID: 0 #
  75. KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
  76. JMX_PORT: 9999 # jmx
  77. volumes:
  78. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
  79. - "$PWD/kafka1/logs:/kafka"
  80. links:
  81. - zoo1
  82. - zoo2
  83. - zoo3
  84. networks:
  85. default:
  86. ipv4_address: 172.27.0.16
  87. kafka2:
  88. image: wurstmeister/kafka
  89. restart: always
  90. container_name: kafka2
  91. hostname: kafka2
  92. ports:
  93. - 9093:9092
  94. - 9998:9999
  95. environment:
  96. #KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.161.62:9093 # 暴露在外的地址
  97. KAFKA_ADVERTISED_HOST_NAME: kafka2 #
  98. KAFKA_HOST_NAME: kafka2
  99. KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
  100. KAFKA_ADVERTISED_PORT: 9093 # 暴露在外的端口
  101. KAFKA_BROKER_ID: 0 #
  102. KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
  103. JMX_PORT: 9999 # jmx
  104. volumes:
  105. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
  106. - "$PWD/kafka2/logs:/kafka"
  107. links:
  108. - zoo1
  109. - zoo2
  110. - zoo3
  111. networks:
  112. default:
  113. ipv4_address: 172.27.0.17
  114. kafka3:
  115. image: wurstmeister/kafka
  116. restart: always
  117. container_name: kafka3
  118. hostname: kafka3
  119. ports:
  120. - 9094:9092
  121. - 9997:9999
  122. environment:
  123. #KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.161.62:9094 # 暴露在外的地址
  124. KAFKA_ADVERTISED_HOST_NAME: kafka3 #
  125. KAFKA_HOST_NAME: kafka3
  126. KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
  127. KAFKA_ADVERTISED_PORT: 9094 # 暴露在外的端口
  128. KAFKA_BROKER_ID: 0 #
  129. KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9094
  130. JMX_PORT: 9999 # jmx
  131. volumes:
  132. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
  133. - "$PWD/kafka3/logs:/kafka"
  134. links:
  135. - zoo1
  136. - zoo2
  137. - zoo3
  138. networks:
  139. default:
  140. ipv4_address: 172.27.0.18
  141. kafka-manager:
  142. image: sheepkiller/kafka-manager
  143. restart: always
  144. hostname: kafka-manager
  145. container_name: kafka-manager1
  146. ports:
  147. - 9500:9000
  148. links:
  149. - kafka1
  150. - kafka2
  151. - kafka3
  152. - zoo1
  153. - zoo2
  154. - zoo3
  155. volumes:
  156. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
  157. # - "./zoo3/data:/data"
  158. # - "./zoo3/datalog:/datalog"
  159. environment:
  160. ZK_HOSTS: zoo1:2181,zoo2:2181,zoo3:2181
  161. KAFKA_BROKERS: kafka1:9092,kafka2:9093,kafka3:9094
  162. APPLICATION_SECRET: letmein
  163. KAFKA_MANAGER_AUTH_ENABLED: "true" # 开启验证
  164. KAFKA_MANAGER_USERNAME: "admin" # 用户名
  165. KAFKA_MANAGER_PASSWORD: "admin" # 密码
  166. KM_ARGS: -Djava.net.preferIPv4Stack=true
  167. networks:
  168. default:
  169. ipv4_address: 172.27.0.15
  170. #docker-compose scale kafka=3
  171. networks:
  172. default:
  173. external:
  174. name: zookeeper_network

配置文件测试及服务启动


docker-compose config

docker-compose up -d

初始化集群

#### 初始化zk kafka集群
cd /data/docker-containers/zk-kafka-server/
docker-compose stop &&echo y| docker-compose rm&&docker-compose up -d

ls -laskht zoo{1,2,3}/data/
ls -laskht zoo{1,2,3}/datalog/
rm zoo{1,2,3}/data/* -rf
rm zoo{1,2,3}/datalog/* -rf

ls -lakht kafka{1,2,3}/logs/
rm kafka{1,2,3}/logs/* -rf

查看kafka集群状态 # mode 为leader或follower正常

docker exec -it zoo1 bash bin/zkServer.sh status
docker exec -it zoo2 bash bin/zkServer.sh status
docker exec -it zoo3 bash bin/zkServer.sh status

创建topic 测试

docker exec -it kafka1 bash
kafka-topics.sh --create --zookeeper zoo1:2181 --replication-factor 1 --partitions 3 --topic test001
kafka-topics.sh --list --zookeeper zoo1:2181
kafka-topics.sh --list --zookeeper zoo2:2181
kafka-topics.sh --list --zookeeper zoo3:2181

生产消息

kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9093,kafka3:9094 --topic test001

消费消息

kafka-console-consumer.sh --bootstrap-server kafka1:9092,kafka2:9093,kafka3:9094 --topic test001 --from-beginning