July 26

Kafka для новичков в доккере

Быстрая настройка KAFKA KRAFT MODE SINGLE NODE SASL

services:
  kafka-node1:
    image: confluentinc/cp-kafka:7.0.1
    container_name: kafka-node1
    ports:
      - "9092:9092"
      - "9093:9093"
      - "9094:9094"
    environment:
      KAFKA_KRAFT_MODE: 'true'
      KAFKA_BROKER_ID: 1
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_CONTROLLER_QUORUM_VOTERS: "[email protected]:9093,[email protected]:9093,[email protected]:9093,[email protected]:9093"
      KAFKA_LISTENERS: PLAINTEXT://192.168.1.1:9092,CONTROLLER://192.168.1.1:9093,SASL_PLAINTEXT://192.168.1.1:9094
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.1.1:9092,SASL_PLAINTEXT://192.168.1.1:9094
      KAFKA_LOG_DIRS: /var/lib/kafka/data
      KAFKA_METADATA_LOG_DIR: /var/lib/kafka/metadata
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
      KAFKA_HEAP_OPTS: "-Xms6g -Xmx6g -XX:MetaspaceSize=96m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80"
      KAFKA_SASL_ENABLED_MECHANISMS: "PLAIN"
      KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf"
      KAFKA_SASL_JAAS_CONFIG: "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"admin\" password=\"admin-secret\" user_admin=\"admin-secret\" user_user=\"user-secret\";"
    volumes:
      - /path/to/kafka/data:/var/lib/kafka/data
      - /path/to/kafka/metadata:/var/lib/kafka/metadata
      - /path/to/kafka/config/kafka_server_jaas.conf:/etc/kafka/kafka_server_jaas.conf
    sysctls:
      - vm.max_map_count=262144
    networks:
      - kafka-net

networks:
  kafka-net:
    driver: bridge

Объяснение параметров:

  • KAFKA_KRAFT_MODE: Указывает, что Kafka работает в режиме KRaft.
  • KAFKA_BROKER_ID: Уникальный идентификатор брокера.
  • KAFKA_NODE_ID: Уникальный идентификатор узла.
  • KAFKA_PROCESS_ROLES: Роли процесса, в данном случае брокер и контроллер.
  • KAFKA_CONTROLLER_QUORUM_VOTERS: Список узлов контроллера с их адресами и портами.
  • KAFKA_LISTENERS: Адреса и порты для прослушивания соединений.
  • KAFKA_ADVERTISED_LISTENERS: Адреса и порты, которые будут рекламироваться клиентам.
  • KAFKA_LOG_DIRS: Директории для хранения логов Kafka.
  • KAFKA_METADATA_LOG_DIR: Директория для хранения метаданных контроллера.
  • KAFKA_AUTO_CREATE_TOPICS_ENABLE: Включает автоматическое создание тем.
  • KAFKA_HEAP_OPTS: Параметры JVM для настройки памяти и производительности.
  • KAFKA_OPTS: Опции для Java, включающие указание файла конфигурации JAAS.
  • KAFKA_SASL_ENABLED_MECHANISMS: Включенные механизмы SASL, в данном случае PLAIN.
  • KAFKA_SASL_JAAS_CONFIG: Конфигурация JAAS для аутентификации SASL/PLAIN.

Объяснение поля KAFKA_ADVERTISED_LISTENERS

Поле KAFKA_ADVERTISED_LISTENERS определяет, какие адреса и порты будут рекламироваться клиентам для подключения к брокерам Kafka.

Синтаксис: protocol://advertised_address:advertised_port

  • protocol: Протокол, используемый для соединения (например, PLAINTEXT).
  • advertised_address: Адрес, который будет рекламироваться клиентам для подключения.
  • advertised_port: Порт, который будет рекламироваться клиентам для подключения.

KAFKA_LISTENERS и KAFKA_ADVERTISED_LISTENERS — это два важных параметра в конфигурации Kafka, которые управляют сетевыми настройками брокера. Вот их различия:

KAFKA_LISTENERS

  • Описание: Это поле определяет, на каких адресах и портах брокер Kafka будет слушать входящие соединения.
  • Использование: Указывается для настройки внутренних сетевых интерфейсов, на которых брокер ожидает входящие подключения.
  • Пример:yamlКопировать кодKAFKA_LISTENERS: PLAINTEXT://192.168.1.1:9092,CONTROLLER://192.168.1.1:9093

KAFKA_ADVERTISED_LISTENERS

  • Описание: Это поле определяет, какие адреса и порты брокер Kafka будет рекламировать клиентам для подключения.
  • Использование: Указывается для настройки адресов и портов, которые будут использованы клиентами (продюсерами и потребителями) для подключения к брокеру. Это особенно важно, если брокеры находятся за NAT или работают с несколькими сетевыми интерфейсами.
  • Пример:yamlКопировать кодKAFKA_ADVERTISED_LISTENERS: PLAINTEXT://your.public.ip:9092

Основные различия

  1. Цель:
    • KAFKA_LISTENERS используется для определения адресов и портов, на которых брокер принимает входящие соединения.
    • KAFKA_ADVERTISED_LISTENERS используется для указания адресов и портов, которые брокер рекламирует клиентам для подключения.
  2. Сценарии использования:
    • KAFKA_LISTENERS может использоваться для настройки внутренних или приватных IP-адресов, которые доступны только внутри сети Docker или локальной сети.
    • KAFKA_ADVERTISED_LISTENERS должен быть настроен на публичные IP-адреса или DNS-имена, которые доступны клиентам извне, особенно если клиенты подключаются через интернет или через другие сети.