可以的,Debian 上的 Kafka 完全是可以容器化的,而且在实际生产/测试环境中非常常见。
下面从 可行性、常见做法、注意事项 三个方面说清楚。
Kafka 本质是一个 Java 进程 + 依赖 Zookeeper(或 KRaft),并不依赖特定操作系统。
Debian 只是运行环境,容器化后:
debian:12)✅ 所以:Debian 上跑的 Kafka → 可以原样容器化
FROM debian:12
RUN apt update && apt install -y openjdk-17-jre wget && rm -rf /var/lib/apt/lists/*
ENV KAFKA_VERSION=3.7.0
RUN wget https://downloads.apache.org/kafka/${KAFKA_VERSION}/kafka_2.13-${KAFKA_VERSION}.tgz \
&& tar -xzf kafka_2.13-${KAFKA_VERSION}.tgz -C /opt
WORKDIR /opt/kafka_2.13-${KAFKA_VERSION}
CMD ["bin/kafka-server-start.sh", "config/server.properties"]
构建:
docker build -t debian-kafka .
docker run -d --name kafka \
-p 9092:9092 \
bitnami/kafka
或 Confluent:
docker run -d --name kafka confluentinc/cp-kafka
这些镜像底层通常就是 Debian/Ubuntu。
version: "3"
services:
zookeeper:
image: zookeeper:3.9
kafka:
image: bitnami/kafka
ports:
- "9092:9092"
environment:
- KAFKA_BROKER_ID=1
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
Kafka 会把自己的 hostname/IP 告诉客户端:
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://宿主机IP:9092
容器内外访问必须一致。
Kafka 有状态,必须挂载卷:
-v kafka-data:/opt/kafka/data
否则容器重启数据就没了。
生产推荐 KRaft,部署更简单。
Kafka 吃内存,建议:
deploy:
resources:
limits:
memory: 2g
Debian 上的 Kafka 完全可以容器化,而且这是目前主流做法。
如果你愿意,我可以:
你现在是 学习 / 测试 / 生产 用的?