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

标签 docker groovy apache-kafka

我有一个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 --replication-factor 1 --partitions 1 --topic test”。

但是,一旦启动,不容易看到一个如何与此容器中的对象进行编辑/交互。

启动后,如何在docker中管理kafka容器实例。否则,您必须添加到docker run命令中以获取在启动时预先创建的主题

在这一点上收到的忠告

最佳答案

错误消息{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)。

关于docker - 如何使用docker命令将主题添加到正在运行的kafka容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41922625/

相关文章:

gradle - 运行gradle任务并将其返回值保存到shell脚本变量中

list - Groovy/Grails - 需要检索列表索引值

docker - 如何正确将子目录与计划的卷和configMaps配合使用

android - 将 USB Android 设备从 Windows 10 主机挂载到 Docker 容器

groovy - 使用来自 Groovy 的供应商调用 Java 方法

message-queue - Kafka 0.8 生产者,使用 "request.required.acks"属性

java - Kafka 消费者异常和抵消提交

exception - 如何跳过在 Kafka 中产生运行时异常的记录并保持流运行?

docker - docker Swarm 和 Swarm 模式有什么区别?

docker - 命令 docker run 创建空容器