Bài viết này mình sẽ hướng dẫn cài đặt Kafka ở local. Cài đặt một cụm Kafka với zookeeper và nhiều Brokers không dễ. Docker là một giải pháp tuyệt vời trong một số trường hợp. Và dưới đây là một file docker-compose.yml (tiền điều kiện là mọi người đã biết về docker và docker-compose nhé)
version: '3' services: zoo: image: zookeeper:3.4.9 hostname: zoo ports: - "2181:2181" environment: ZOO_MY_ID: 1 ZOO_PORT: 2181 ZOO_SERVERS: server.1=zoo:2888:3888 volumes: - ./zk-single-kafka-multiple/zoo/data:/data - ./zk-single-kafka-multiple/zoo/datalog:/datalog kafka1: image: confluentinc/cp-kafka:5.3.0 hostname: kafka1 ports: - "9091:9091" environment: KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER_INTERNAL://kafka1:19091,LISTENER_DOCKER_EXTERNAL://${DOCKER_HOST_IP:-127.0.0.1}:9091 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER_INTERNAL:PLAINTEXT,LISTENER_DOCKER_EXTERNAL:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER_INTERNAL KAFKA_ZOOKEEPER_CONNECT: "zoo:2181" KAFKA_BROKER_ID: 1 KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO" volumes: - ./zk-single-kafka-multiple/kafka1/data:/var/lib/kafka/data depends_on: - zoo kafka2: image: confluentinc/cp-kafka:5.3.0 hostname: kafka2 ports: - "9092:9092" environment: KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER_INTERNAL://kafka2:19092,LISTENER_DOCKER_EXTERNAL://${DOCKER_HOST_IP:-127.0.0.1}:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER_INTERNAL:PLAINTEXT,LISTENER_DOCKER_EXTERNAL:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER_INTERNAL KAFKA_ZOOKEEPER_CONNECT: "zoo:2181" KAFKA_BROKER_ID: 2 KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO" volumes: - ./zk-single-kafka-multiple/kafka2/data:/var/lib/kafka/data depends_on: - zoo kafka3: image: confluentinc/cp-kafka:5.3.0 hostname: kafka3 ports: - "9093:9093" environment: KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER_INTERNAL://kafka3:19093,LISTENER_DOCKER_EXTERNAL://${DOCKER_HOST_IP:-127.0.0.1}:9093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER_INTERNAL:PLAINTEXT,LISTENER_DOCKER_EXTERNAL:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER_INTERNAL KAFKA_ZOOKEEPER_CONNECT: "zoo:2181" KAFKA_BROKER_ID: 3 KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO" volumes: - ./zk-single-kafka-multiple/kafka3/data:/var/lib/kafka/data depends_on: - zoo manager: image: sheepkiller/kafka-manager ports: - 9000:9000 environment: - ZK_HOSTS=zoo:2181 depends_on: - zoo
Tạo một thư mục trống và tạo file docker-compos.yml
. Sao chép nội dung trên và dán nội dung đó vào file vừa tạo. Tiếp theo sử dụng lệnh dưới đây để khởi động và chạy toàn bộ cụm kafka. Docker compose sẽ tạo ra 1 zookeper, 3 kafka-brokers và 1 kafka-manager. Nếu chạy lần đầu có thể sẽ mất vài phút để pull docker image.
docker-compose up
Tạo cluster
Xem thông tin cluster
Khi cluster được tạo, mặc định nó sẽ có 2 Topics. Đây là những internal topic của Kafka.
Tạo topic
Tạo một topic với 3 partitions và 2 replicaset
Xem thông tin topic vừa tạo
Ở đây có 3 brocker và 3 partitions cho first-topic. Các partion là 0, 1, 2. Mỗi brocker có 2 partitions. Như mọi người để ý Partition 0 ở trong brocker 1 và brocker 2. Tương tự các partition khác được nhân bản trong nhiều brocker. Nếu có bất ký brocker nào down (die) thì 2 brocker khác vẫn có thể phục vụ tất cả các partition cho Topic.
Mỗi topic có một Leader. Nếu chúng ta terminal 1 kafka-brocker thì một Leader mới sẽ được chọn để thay thế.
Terminal 1 kafka-brocker
docker-compose stop kafka2
Dừng các dịch vụ kafka
docker-compose down
Tổng kết
Và trên đây là một số cài đặt nhanh một cụm Kafka. Hi vọng bài viết hữu ịch với mọi người.
Mọi người có thể tìm hiểu các bài viết liên quan tại đây:
Một số bài viết tham khảo thêm:
Follow me: thenewstack.wordpress.com