[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

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

Nguồn: viblo.asia

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,