+4

[Kafka] - Install Kafka cluter on local using Docker compose

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:

Nguồn: https://thenewstack.wordpress.com/2021/11/24/kafka-install-kafka-cluter-on-local-using-docker-compose/

Follow me: thenewstack.wordpress.com


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.