Trong bài viết trước, mình đã hướng dẫn các bạn cách cài đặt Apache Kafka trên macOS. Việc cài đặt Apache Kafka sử dụng Docker Compose sẽ giúp chúng ta nhanh chóng start lên một Apache Kafka server mà không tốn nhiều effort, chỉ cần cài đặt Docker và một tập tin docker-compose.yml. Cụ thể như thế nào? Trong bài viết này, mình sẽ hướng dẫn các bạn cách cài đặt Apache Kafka sử dụng Docker Compose các bạn nhé!
Mình sẽ tạo mới một tập tin docker-compose.yml và khai báo 2 service, một cho Apache Zookeeper và một cho Apache Kafka như sau:
1 2 3 4 |
services: zookeeper: kafka: |
Vì Apache Kafka muốn chạy được phải có Apache Zookeeper nên mình sẽ khai báo service zookeeper trước.
Chúng ta sẽ sử dụng các Docker Image của Apache Kafka và Apache Zookeeper từ Confluent Platform https://www.confluent.io/ với địa chỉ Docker Hub là https://hub.docker.com/u/confluentinc. Nói nôm na thì Confluent Platform là một mở rộng của Apache Kafka, được xây dựng từ Apache Kafka cùng với các công cụ và service hữu ích khác giúp chúng ta có thể dễ dàng chạy và sử dụng Apache Kafka đó các bạn! Không có Docker Official Image từ Apache Kafka nên chúng ta có thể sử dụng các Docker Images từ Confluent Platform này.
Nội dung của zookeeper service như sau:
1 2 3 4 5 6 |
zookeeper: image: confluentinc/cp-zookeeper:latest environment: ZOOKEEPER_CLIENT_PORT: 2181 ports: - 2181:2181 |
ZOOKEEPER_CLIENT_PORT là biến môi trường bắt buộc để định nghĩa port mà client có thể kết nối tới Apache Zookeeper. Trong trường hợp của chúng ta là Apache Kafka đó các bạn! Ở đây, mình cũng expose port 2181 là port mặc định của Apache Zookeeper ra ngoài.
Còn kafka service thì có nội dung như sau:
1 2 3 4 5 6 7 8 9 10 |
kafka: image: confluentinc/cp-kafka:latest depends_on: - zookeeper environment: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT ports: - 9092:9092 |
Biến môi trường KAFKA_ZOOKEEPER_CONNECT được sử dụng để định nghĩa Apache ZooKeeper server mà Apache Kafka sẽ connect tới, còn biến KAFKA_ADVERTISED_LISTENERS ở đây mình định nghĩa 2 loại listener:
- PLAINTEXT://kafka:29092 để expose port của Apache Kafka cho các Docker Container trong cùng một network có thể connect tới.
- PLAINTEXT_HOST://localhost:9092 dùng để expose Apache Kafka ra ngoài container để các client có thể connect tới.
Cho từng listener, các bạn cần định nghĩa security protocol https://kafka.apache.org/38/javadoc/org/apache/kafka/common/security/auth/SecurityProtocol.html, sử dụng biến môi trường KAFKA_LISTENER_SECURITY_PROTOCOL_MAP. Trong ví dụ của mình, cả 2 listener mình đều sử dụng PLAINTEXT, có nghĩa là không cần authenticate, không cần encrypt đó các bạn!
Chúng ta cũng khai báo networks như sau:
1 2 3 |
networks: huongdanjava: driver: bridge |
Toàn bộ nội dung của tập tin docker-compose.yml như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
services: zookeeper: image: confluentinc/cp-zookeeper:latest environment: ZOOKEEPER_CLIENT_PORT: 2181 ports: - 2181:2181 kafka: image: confluentinc/cp-kafka:latest depends_on: - zookeeper environment: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT ports: - 9092:9092 networks: huongdanjava: driver: bridge |
Nếu bây giờ, các bạn chạy command “docker compose up” trong thư mục chứa tập tin docker-compose.yml này, các bạn sẽ thấy kết quả như sau:
Bây giờ thì các bạn có thể connect tới Apache Kafka server này để sử dụng rồi.