免责声明
tl; dr- 最终,容器中运行 的都是相同的 Apache Kafka。您只取决于 它的配置方式 。以及 哪些变量
使它如此。以下使用
confluentincdocker
images,而不是wurstmeister/kafka,尽管有类似的配置,但我没有尝试过。如果使用该图像,请阅读其Connectivity
Wiki。没有什么与
wurstmeister映像相反,而是由社区维护的,不是内置于自动CI /
CD版本中的。。。Bitnami的映像同样非常简单,可以在多个云提供商中运行。对于bitnamiKafka图片,请参阅其自述文件debezium/kafka这里提到它的文档。
注意:不建议使用公告的主机和端口设置。广告听众涵盖了spotify/kafka已过时和过时。fast-data-dev对于一个解决方案来说很棒,但它it肿有关补充阅读, 功能齐全的
docker-compose网络图,请参阅@rmoff的此博客。
回答
Confluent快速入门(Docker)文档假定所有生产和消费请求都将在Docker网络内。
您可以通过在自己的容器中运行Kafka客户端代码来解决该问题,但否则,您需要添加更多环境变量以在外部暴露该容器,同时使其仍在Docker网络中运行。
首先添加一个协议映射
PLAINTEXT_HOST:PLAINTEXT,它将侦听器协议映射到Kafka协议
-eKAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
然后在不同的端口上设置两个播发的侦听器。(
kafka:9092这里是指Docker容器的名称)。请注意,协议与上面映射的右侧值匹配
-eKAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
运行容器时,添加
-p 29092:29092用于主机端口的映射
tl; dr (具有上述设置)
在Docker网络 外部
运行任何Kafka客户端时(包括您可能已在本地安装的CLI工具),可
localhost:29092用于引导服务器和
localhost:2181Zookeeper
在Docker网络中 运行应用程序 时 ,可
kafka:9092用于引导服务器和
zookeeper:2181Zookeeper
有关完整的Confluent堆栈,请参见示例Compose文件。
附录
对于对 Kubernetes 部署感兴趣的任何人:https :
//operatorhub.io/? keyword =
Kafka



