Docker环境下带SSL的Kafka:如何通过命令行读写Topic?
没问题,基于你当前的Docker环境(运行着cp-kafka:4.0.0容器,名字是k1),我来一步步教你怎么用命令行操作Kafka Topic的读写——因为你的Kafka启用了SSL,所以得额外带上SSL相关的配置参数才行。
一、前提说明
你的Kafka容器映射了9092(普通端口)和9093(SSL端口),我们主要用9093端口来进行SSL加密连接。
二、方式1:直接通过Docker Exec执行命令(推荐)
这种方式不需要在宿主机安装Kafka客户端,直接利用容器内的Kafka工具操作。
1. 创建Topic(如果还未创建)
首先要确认ZooKeeper的地址(如果是Confluent集群部署,通常ZooKeeper容器名是zookeeper,地址为zookeeper:2181),执行创建命令:
docker exec k1 kafka-topics --create \ --zookeeper zookeeper:2181 \ --replication-factor 1 \ --partitions 1 \ --topic test-ssl-topic
验证Topic是否创建成功:
docker exec k1 kafka-topics --list --zookeeper zookeeper:2181
2. 向Topic写入消息(生产者)
因为启用了SSL,需要指定容器内的生产者SSL配置文件(通常是挂载的secrets目录下的配置),执行命令进入交互模式:
docker exec k1 kafka-console-producer --broker-list localhost:9093 \ --topic test-ssl-topic \ --producer.config /etc/kafka/secrets/producer.properties
进入后直接输入消息回车即可发送,比如输入Hello SSL Kafka!,按Ctrl+C退出交互。
3. 从Topic读取消息(消费者)
同样需要指定消费者的SSL配置文件,执行命令读取消息(--from-beginning会读取Topic所有历史消息):
docker exec k1 kafka-console-consumer --bootstrap-server localhost:9093 \ --topic test-ssl-topic \ --from-beginning \ --consumer.config /etc/kafka/secrets/consumer.properties
你会看到刚才发送的Hello SSL Kafka!,按Ctrl+C退出。
三、方式2:在宿主机上用Kafka客户端执行命令
如果你的宿主机已经安装了Kafka客户端,需要先把容器内的SSL配置文件复制到本地:
docker cp k1:/etc/kafka/secrets/truststore.jks ./ docker cp k1:/etc/kafka/secrets/producer.properties ./ docker cp k1:/etc/kafka/secrets/consumer.properties ./
然后修改本地配置文件,把证书路径改成宿主机的本地路径(比如把producer.properties里的ssl.truststore.location改为./truststore.jks),之后就可以直接在宿主机执行:
生产者命令
kafka-console-producer --broker-list localhost:9093 \ --topic test-ssl-topic \ --producer.config ./producer.properties
消费者命令
kafka-console-consumer --bootstrap-server localhost:9093 \ --topic test-ssl-topic \ --from-beginning \ --consumer.config ./consumer.properties
注意事项
- 确保容器内的SSL配置文件路径正确,如果你的部署路径不同,需要替换成实际路径。
- 如果ZooKeeper不在同一个Docker网络,需要把
zookeeper:2181替换成实际的ZooKeeper地址和端口。 - 若遇到SSL连接错误,检查配置文件里的
security.protocol=SSL、证书路径和密码是否正确。
内容的提问来源于stack exchange,提问作者Joe

