Kubernetes развертывает кластер Kafka «Случай развертывания Helm»
Kubernetes развертывает кластер Kafka «Случай развертывания Helm»

Этот проект полностью совместим с KRaft, не зависит от ZooKeeper, минимальный Kafka Кластер запускается только один Pod Вот и все. Также можно использовать отдельно Docker Начните облегчать локальную разработку и отладку. Подробную информацию см. Docker запускать Kafka

Prerequisites

  • Kubernetes 1.18+
  • Helm 3.3+

Добавить репозиторий Helm

Язык кода:shell
копировать
helm repo add kafka-repo https://helm-charts.itboon.top/kafka
helm repo update kafka-repo

развертывание руля

Развертывание одноузлового кластера

  • Следующий случай отключает постоянное хранилище и демонстрирует только эффект развертывания.
Язык кода:shell
копировать
helm upgrade --install kafka \
  --namespace kafka-demo \
  --create-namespace \
  --set broker.combinedMode.enabled="true" \
  --set broker.persistence.enabled="false" \
  kafka-repo/kafka

Контроллер и брокер развертываются отдельно.

Язык кода:shell
копировать
helm upgrade --install kafka \
  --namespace kafka-demo \
  --create-namespace \
  --set broker.persistence.size="20Gi" \
  kafka-repo/kafka

Постоянное хранилище включено по умолчанию.

Развертывание кластера высокой доступности

Язык кода:shell
копировать
helm upgrade --install kafka \
  --namespace kafka-demo \
  --create-namespace \
  --set controller.replicaCount="3" \
  --set broker.replicaCount="3" \
  --set broker.heapOpts="-Xms4096m -Xmx4096m" \
  --set broker.resources.requests.memory="8Gi" \
  --set broker.resources.limits.memory="16Gi" \
  kafka-repo/kafka

Более values Пожалуйста, обратитесь к examples/values-production.yml

Внешнее воздействие LoadBalancer

включать Kubernetes Доступ за пределами кластера:

Язык кода:shell
копировать
helm upgrade --install kafka \
  --namespace kafka-demo \
  --create-namespace \
  --set broker.external.enabled="true" \
  --set broker.external.service.type="LoadBalancer" \
  --set broker.external.domainSuffix="kafka.example.com" \
  kafka-repo/kafka

После успешного развертывания завершите настройку разрешения доменных имен.

Chart Values

Key

Type

Default

Description

broker.combinedMode.enabled

bool

false

Whether to enable the combined mode

Язык кода:yaml
копировать
broker:
  combinedMode:
    enabled: true
  replicaCount: 1
  heapOpts: "-Xms1024m -Xmx1024m"
  persistence:
    enabled: true
    size: 20Gi

Доступ за пределами кластера

In order to connect to the Kafka server outside the cluster, each Broker must be exposed and advertised.listeners must be correctly configured.

There are two ways to expose, NodePort and LoadBalancer, each broker node needs a NodePort or LoadBalancer.

Chart Values

Key

Type

значение по умолчанию

описывать

broker.external.enabled

bool

false

ливключать Доступ за пределами кластера

broker.external.service.type

string

NodePort

NodePort or LoadBalancer

broker.external.service.annotations

object

{}

External serivce annotations

broker.external.nodePorts

list

[]

В режиме NodePort укажите хотя бы один номер порта. Если количество портов меньше количества брокеров, оно автоматически увеличится.

broker.external.domainSuffix

string

kafka.example.com

If you use LoadBalancer for external access, you must use a domain name. The external domain name corresponding to the broker is POD_NAME + domain name suffix, such as kafka-broker-0.kafka.example.com. After the deployment, you need to complete the domain name resolution operation

Язык кода:yaml
копировать
## NodePort example
broker:
  replicaCount: 3
  external:
    enabled: true
    service:
      type: "NodePort"
      annotations: {}
    nodePorts:
      - 31050
      - 31051
      - 31052
Язык кода:yaml
копировать
## LoadBalancer example
broker:
  replicaCount: 3
  external:
    enabled: true
    service:
      type: "LoadBalancer"
      annotations: {}
    domainSuffix: "kafka.example.com"

Docker Image

Docker Compose запускает Kafka

Язык кода:yaml
копировать
version: "3"

volumes:
  kafka-data: {}

services:
  kafka:
    image: kafkace/kafka:v3.5
    # restart: always
    ports:
      - "29092:29092"
    volumes:
      - kafka-data:/opt/kafka/data
    environment:
      - KAFKA_HEAP_OPTS=-Xmx512m -Xms512m
      - KAFKA_BROKER_EXTERNAL_HOST=kafka.example.com   ## Имя хоста, доступное внешнему миру, может быть доменным именем или IP-адресом.
      - KAFKA_BROKER_EXTERNAL_PORT=29092

  ## kafka web управлять (необязательный)
  kafka-ui:
    image: provectuslabs/kafka-ui:v0.7.1
    # restart: always
    ports:
      - "18080:8080"
    environment:
      - KAFKA_CLUSTERS_0_NAME=demo-kafka-server
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092

### внутренняя сеть
## broker Внутренний порт по умолчанию 9092
## bootstrap-server: kafka:9092

### внешняя сеть
## broker Внешний порт по умолчанию 29092
## bootstrap-server: ${KAFKA_BROKER_EXTERNAL_HOST}:29092

Environment Variables

переменная

значение по умолчанию

описывать

KAFKA_CLUSTER_ID

случайно сгенерированный

Cluster ID

KAFKA_BROKER_LISTENER_PORT

9092

broker Номер порта, если настроен KAFKA_CFG_LISTENERS Этот элемент будет недействителен

KAFKA_CONTROLLER_LISTENER_PORT

19091

controller Номер порта, если настроен KAFKA_CFG_LISTENERS Этот элемент будет недействителен

KAFKA_BROKER_EXTERNAL_HOST

null

Имя хоста, доступное внешнему миру, может быть именем домена или IP-адресом, если оно настроено. KAFKA_CFG_ADVERTISED_LISTENERS Этот элемент будет недействителен

KAFKA_BROKER_EXTERNAL_PORT

29092

Номер порта, доступный извне, не может совпадать с номером внутреннего порта, если он настроен. KAFKA_CFG_ADVERTISED_LISTENERS Этот элемент будет недействителен

KAFKA_HEAP_OPTS

null

Kafka Java Heap size. Например: -Xmx512m -Xms512m

https://github.com/itboon/kafka-docker

Kafka Configurations

Все с KAFKA_CFG_ Окружения, начинающиеся с переменная, будут сопоставлены с соответствующими им. Apache Kafka Элементы конфигурации.

Например KAFKA_CFG_LISTENERS Соответствующие параметры конфигурации listeners,KAFKA_CFG_ADVERTISED_LISTENERS Соответствующие параметры конфигурации advertised.listeners

Variable examples:

переменная

Элементы конфигурации

KAFKA_CFG_PROCESS_ROLES

process.roles

KAFKA_CFG_LISTENERS

listeners

KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP

listener.security.protocol.map

KAFKA_CFG_ADVERTISED_LISTENERS

advertised.listeners

KAFKA_CFG_CONTROLLER_QUORUM_VOTERS

controller.quorum.voters

KAFKA_CFG_LOG_RETENTION_HOURS

log.retention.hours

log.dir и log.dirs Уже заблокирован и не может быть перезаписан с использованием переменной среды.

Другие варианты развертывания Kafka Kubernetes

boy illustration
Краткое изложение 10 способов регистрации bean-компонентов в SpringBoot
boy illustration
Flask Learning-9. 2 способа включения режима отладки (debug mode).
boy illustration
Руководство по настройке самостоятельного сервера для Eudemons Parlu
boy illustration
40 вопросов для собеседований по SpringBoot, которые необходимо задавать на собеседованиях! При необходимости ответьте на вопросы для собеседования SpringBoot [предлагаемый сборник] [легко понять]
boy illustration
Через два года JVM может быть заменен GraalVM.
boy illustration
Разрешение циклических зависимостей Spring Bean: существует ли неразрешимая циклическая ссылка?
boy illustration
Разница между промежуточным программным обеспечением ASP.NET Core и фильтрами
boy illustration
[Серия Foolish Old Man] Ноябрь 2023 г. Специальная тема Winform Control Элемент управления DataGridView Подробное объяснение
boy illustration
.NET Как загрузить файлы через HttpWebRequest
boy illustration
[Веселый проект Docker] Обновленная версия 2023 года! Создайте эксклюзивный инструмент управления паролями за 10 минут — Vaultwarden
boy illustration
Высокопроизводительная библиотека бревен Golang zap + компонент для резки бревен лесоруба подробное объяснение
boy illustration
Концепция и использование Springboot ConstraintValidator
boy illustration
Новые функции Go 1.23: точная настройка основных библиотек, таких как срезы и синхронизация, значительно улучшающая процесс разработки.
boy illustration
[Весна] Введение и базовое использование AOP в Spring, SpringBoot использует AOP.
boy illustration
Чтобы начать работу с рабочим процессом Flowable, этой статьи достаточно.
boy illustration
Байтовое интервью: как решить проблему с задержкой сообщений MQ?
boy illustration
ASP.NET Core использует функциональные переключатели для управления реализацией доступа по маршрутизации.
boy illustration
[Проблема] Решение Невозможно подключиться к Redis; вложенное исключение — io.lettuce.core.RedisConnectionException.
boy illustration
От теории к практике: проектирование чистой архитектуры в проектах Go
boy illustration
Решение проблемы искажения китайских символов при чтении файлов Net Core.
boy illustration
Реализация легких независимых конвейеров с использованием Brighter
boy illustration
Как удалить и вернуть указанную пару ключ-значение из ассоциативного массива в PHP
boy illustration
Feiniu fnos использует Docker для развертывания учебного пособия по AList
boy illustration
Принципы и практика использования многопоточности в различных версиях .NET.
boy illustration
Как использовать PaddleOCRSharp в рамках .NET
boy illustration
CRUD используется уже два или три года. Как читать исходный код Spring?
boy illustration
Устраните проблему совместимости между версией Spring Boot и Gradle Java: возникла проблема при настройке корневого проекта «demo1» > Не удалось.
boy illustration
Научите вас шаг за шагом, как настроить Nginx.
boy illustration
Это руководство — все, что вам нужно для руководства по автономному развертыванию сервера для проектов Python уровня няни (рекомендуемый сборник).
boy illustration
Не удалось запустить docker.service — Подробное объяснение идеального решения ️