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
Nguồn: viblo.asia