需求
公司内网kafka需要外部访问,通过外网端口映射到kakfa内网某个端口
软件
docker下部署的kafka,使用镜像为:confluentinc/cp-kafka
网络:
公司外网和内网映射:IP1:10001—>IP2:10002
kakfa内网ip为IP2
实现
kafka核心配置如下:(IP1,IP2对应各自内外网ip)
kafka:
image: confluentinc/cp-kafka
ports:
- 10002:10002 #外网访问端口
- 9093:9093 #内网访问端口
environment:
# LISTENERS
KAFKA_LISTENERS: INTERNAL://:9093,EXTERNAL://:10002
# ADVERTISED_LISTENERS
KAFKA_ADVERTISED_LISTENERS: INTERNAL://{IP2}:9093,EXTERNAL://{IP1}:10001
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:SASL_PLAINTEXT,EXTERNAL:SASL_PLAINTEXT
listeners就是主要用来定义Kafka Broker的Listener的配置项。
advertised.listeners参数的作用就是将Broker的Listener信息发布到Zookeeper中,供Clients(Producer/Consumer)使用。如果配置了advertised.listeners,那么就不会将listeners配置的信息发布到Zookeeper中去了
可以参考此文章Kafka从上手到实践-Kafka集群:Kafka Listeners,其实具体还是不理解。
疑问
- advertised.listeners 和listeners具体关系
- kafka 启动流程,以及producer连接流程