我有一个使用以下
启动的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 logs kafka来查看它的启动。
然后我创建了一个简单的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()
但似乎并没有启用自动主题创建。鉴于我已经将kafka服务器作为docker容器进行了旋转 - 如何使用docker命令启动并运行该容器实例作为与容器通信的方法
在kafka网站上有一个关于运行shell命令的注释“bin / kafka-topics.sh --create --zookeeper localhost:2181 --rerelication-factor 1 --partitions 1 --topic test “
但不容易看出一旦它在容器中如何编辑/交互它。
如何在启动时管理docker中的kafka容器实例。否则你必须添加到docker run命令以获取在启动时预先创建的主题
此时收到的建议非常好
答案 0 :(得分:2)
错误消息{wills topic=INVALID_TOPIC_EXCEPTION}
表示您使用wills topic
作为主题名称。
主题名称不能包含空格。尝试重命名为wills_topic
,它应该可以解决问题。
此正则表达式描述了主题名称的合法字符(选中sources):
val legalChars = "[a-zA-Z0-9\\._\\-]"
使用docker exec -it <container-name> <command>
启动Kafka管理工具。或者只是在容器docker exec -it <container-name> bash
中打开一个bash(参见Docker docs)。
答案 1 :(得分:0)
使用docker exec -it [container_id] /opt/kafka_2.11-0.10.1.0/bin/kafka-topics.sh --create --zookeeper localhost:2181-复制因子1-分区1-主题测试