如何使用docker命令将主题添加到正在运行的kafka容器?

我有一个卡夫卡容器开始使用以下

docker run --detach --name kafka -p 2181:2181 -p 9092:9092 --env ADVERTISED_HOST=192.168.1.89 --env ADVERVTISED_PORT=9092 --env AUTO.CREATE.TOPICS.ENABLE spotify/kafka 

我可以使用docker日志卡夫卡看到它的开始。

然后,我创build了一个简单的groovy脚本客户端生产者写入一些条目,但是这不断错误

 > Sending metadata request {topics=[wills topic]} to node 0 > Error while fetching metadata with correlation id 1 : {wills topic=INVALID_TOPIC_EXCEPTION} .... 

我在客户端代码中设置了以下属性

  Properties props = new Properties() props.put("bootstrap.servers", "192.168.1.89:9092" ) //Assign localhost id and external port (9092 int) props.put("acks", "all") //Set acknowledgements for producer requests. props.put("retries", 0) //If the request fails, the producer can automatically retry, props.put("batch.size", 16384) //Specify buffer size in config props.put("linger.ms", 1) //Reduce the no of requests less than 0 props.put("buffer.memory", 33554432) //The buffer.memory controls the total amount of memory available to the producer for buffering. props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer") props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer") props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") props.put ("auto.create.topics.enable", true) //enable auto topic creation producer = new org.apache.kafka.clients.producer.KafkaProducer<String, String>(props) for(int i = 0; i < 10; i++) { producer.send(new ProducerRecord<String, String>(topicName, Integer.toString(i), Integer.toString(i))) } println("Message sent successfully") producer.close() 

但是这似乎并不能启用自动创build主题。 鉴于我已经将kafka服务器转换为docker容器 – 如何使用docker命令作为与容器对话的方式来pipe理容器实例

在运行shell命令行的kafka网站上有一个注释“bin / kafka-topics.sh –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic test”

但一旦它在容器中一旦编辑/交互,就不容易了。

如何在Docker启动后pipe理kafka容器实例 否则,你必须添加到docker运行命令来获取启动时预先创build的主题

在这一点上得到了很好的build议

错误消息{wills topic=INVALID_TOPIC_EXCEPTION}表示您正在使用wills topic作为主题名称。

主题名称不能包含空格。 尝试重命名为wills_topic ,它应该解决这个问题。

这个正则expression式描述主题名称(检查源 )的合法字符:

 val legalChars = "[a-zA-Z0-9\\._\\-]" 

使用docker exec -it <container-name> <command>启动Kafkapipe理工具。 或者在你的容器docker exec -it <container-name> bash打开一个bash(参见Docker文档 )。