Apache Kafka 是一个开源分布式事件流平台,已被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序。
- 全面兼容
KRaft
, 不依赖 ZooKeeper - 灵活使用环境变量进行配置覆盖
- 上手简单
- 提供
helm chart
,你可以在 Kubernetes 快速部署高可用 Kafka 集群
最简单的方式启动 Kafka:
docker run -d --name demo-kafka-server kafkace/kafka:v3.5
跨主机访问需要开启外部网络:
docker run -d --name demo-kafka-server \
-p 29092:29092 \
--env KAFKA_BROKER_EXTERNAL_HOST="172.16.1.149" \
--env KAFKA_BROKER_EXTERNAL_PORT="29092" \
kafkace/kafka:v3.5
- broker 默认内部端口
9092
KAFKA_BROKER_EXTERNAL_HOST
, 对外暴露的主机名,可以是域名或IP地址KAFKA_BROKER_EXTERNAL_PORT
, 对外暴露的端口号,不能跟内部端口重复
在没有提供
KAFKA_BROKER_EXTERNAL_HOST
的情况下,仅通过 docker 对外暴露端口是无效的。
docker volume create kafka-data
docker run -d --name demo-kafka-server \
-p 29092:29092 \
-v kafka-data:/opt/kafka/data \
--env KAFKA_BROKER_EXTERNAL_HOST="172.16.1.149" \
--env KAFKA_BROKER_EXTERNAL_PORT="29092" \
kafkace/kafka:v3.5
version: "3"
volumes:
kafka-data: {}
services:
kafka:
image: kafkace/kafka:v3.6
# restart: always
ports:
- "29092:29092"
volumes:
- kafka-data:/opt/kafka/data
environment:
KAFKA_HEAP_OPTS: "-Xms1024m -Xmx1024m"
## 将下面 ${KAFKA_BROKER_EXTERNAL_HOST} 替换成你自己的外部主机名,可以是域名或IP地址
## KAFKA_BROKER_EXTERNAL_HOST: kafka-broker-01.example.com
KAFKA_BROKER_EXTERNAL_HOST: ${KAFKA_BROKER_EXTERNAL_HOST}
# KAFKA_BROKER_EXTERNAL_PORT: "29092"
## kafka web 管理 (可选)
kafka-ui:
image: provectuslabs/kafka-ui:v0.7.1
# restart: always
ports:
- "18080:8080"
environment:
DYNAMIC_CONFIG_ENABLED: "true"
KAFKA_CLUSTERS_0_NAME: kafka-demo
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092
# KAFKA_CLUSTERS_0_READONLY: "true"
### 内部网络
## broker 默认内部端口 9092
## bootstrap-server: kafka:9092
### 外部网络
## broker 默认外部端口 29092
## bootstrap-server: ${KAFKA_BROKER_EXTERNAL_HOST}:29092
变量 | 默认值 | 描述 |
---|---|---|
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 |
所有以 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
已经被锁定,无法使用环境变量进行覆盖。
- Kubernetes 1.22+
- Helm 3.3+
helm repo add kafka-repo https://helm-charts.itboon.top/kafka
helm repo update kafka-repo
## 下面的部署案例关闭了持久化存储,仅作为演示
helm upgrade --install kafka \
--namespace kafka-demo \
--create-namespace \
--set broker.persistence.enabled="false" \
kafka-repo/kafka
## 默认已开启持久化存储
helm upgrade --install kafka \
--namespace kafka-demo \
--create-namespace \
kafka-repo/kafka
helm upgrade --install kafka \
--namespace kafka-demo \
--create-namespace \
--set broker.combinedMode.enabled="false" \
--set controller.replicaCount="1" \
--set broker.replicaCount="1" \
kafka-repo/kafka
broker.combinedMode.enabled
混部模式,即进程同时具有 broker + controller 角色,单节点服务器启动一个 Pod 即可。kafka-repo/kafka
默认开启混部,kafka-repo/kafka-ha
默认关闭混部。
## kafka-repo/kafka-ha 默认部署 3 controller + 3 broker
helm upgrade --install kafka \
--namespace kafka-demo \
--create-namespace \
kafka-repo/kafka-ha
## 调整集群资源配额
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-ha
More values please refer to examples/values-production.yml
请参考 https://github.com/itboon/kafka-docker/blob/main/docs/external.md