【问题标题】:Kafka inside Docker - how to read/write to a topic from command line?Docker 中的 Kafka - 如何从命令行读取/写入主题?
【发布时间】:2018-10-04 01:25:40
【问题描述】:

我有一个在 Docker 中运行并启用 SSL 的 Kafka。

docker ps:

CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                                        NAMES
b8f6b1c573a1        nginx:1.13.9-alpine                     "nginx -g 'daemon of…"   9 hours ago         Up 9 hours          80/tcp, 0.0.0.0:8081->443/tcp                ng
761ce6ee2960        confluentinc/cp-schema-registry:4.0.0   "/etc/confluent/dock…"   9 hours ago         Up 9 hours          0.0.0.0:8080->8080/tcp, 8081/tcp             sr
16d7b81dfbc8        confluentinc/cp-kafka:4.0.0             "/etc/confluent/dock…"   9 hours ago         Up 9 hours          0.0.0.0:9092-9093->9092-9093/tcp             k1
9be579992536        confluentinc/cp-zookeeper:4.0.0         "/etc/confluent/dock…"   9 hours ago         Up 9 hours          2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp   zk

如何从命令行写入主题?
已尝试(存在主题“测试”):

kafka-console-producer  --broker-list kafka:9093 --topic test
# [2018-04-23 17:55:14,325] ERROR Error when sending message to topic test with key: null, value: 2 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
# org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms. (60s timeout)


kafka-console-producer  --broker-list kafka:9092 --topic test
>aa
#[2018-04-23 18:00:59,443] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 1 : {test=TOPIC_AUTHORIZATION_FAILED} (org.apache.kafka.clients.NetworkClient)
#[2018-04-23 18:00:59,444] ERROR Error when sending message to topic test with key: null, value: 2 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
# org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [test]

kafka-console-producer  --broker-list localhost:9092 --topic test                                                                                                                                                             dnk306@9801a7a5b33d
>aa
#[2018-04-23 21:52:47,056] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 1 : {test=TOPIC_AUTHORIZATION_FAILED} (org.apache.kafka.clients.NetworkClient)
#[2018-04-23 21:52:47,056] ERROR Error when sending message to topic test with key: null, value: 2 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
#org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [test]

【问题讨论】:

    标签: bash docker apache-kafka confluent-platform


    【解决方案1】:

    在模式注册表或 Kafka 容器中,如果您使用 Docker compose 配置,这是可能的,因为容器将由 Compose 链接,但是,您的容器主机名可能是 k1 而不是 kafka

    如果您在 Kafka 容器内或在容器外使用 CLI 命令,则只需 localhost:9093(因为您转发了端口)。

    如果您在 Kafka 以外的某个容器中,并且您想通过主机名解析 Kafka 容器,则必须在 docker run 中添加 --link kafka。有关链接容器的信息,请参阅 Docker 文档

    同样重要的是,您需要将 Kafka 容器链接到 Zookeeper 容器,并将 Schema Registry 链接到一个或另一个 ZK 或 Kafka,具体取决于它的配置方式。

    https://docs.confluent.io/current/installation/docker/docs/quickstart.html

    Also SSL Kafka Docker compose examples here

    TopicAuthorizationException:无权访问主题:[测试]

    这表示成功连接到 Kafka 容器。你下一步是ensure your Java environment has the necessary keys to access the broker over SSL

    【讨论】:

    • 我正在使用 docker-compose 并试图从外部(从我旋转 docker 的主机)访问 Kafka 集群。
    • 使用localhost:9092 有同样的错误(获取相关ID 为1 的元数据时出错:{test=TOPIC_AUTHORIZATION_FAILED} (org.apache.kafka.clients.NetworkClient)。使用localhost:9093 后有超时60 秒(与使用 registry:9092/3 时的错误相同)
    • 1) Authorization failed 是您应该看到的错误。例如,您的生产者没有正确配置 JKS 2) 不知道为什么 9093 不能工作,除非 SSL 端口实际上在 9092 上 3) 注册表容器永远不会在端口 9092 上响应,它不是代理
    • 谢谢。对于 1) -> 从命令行运行生产者时,我是否应该提供带有一些参数的 JKS 文件的路径?对于 2) -> 如果您可以在问题中向右滚动(每个 docker 容器都显示了端口)..
    • 更新了答案并附有 Confluent SSL 配置的链接。此外,仅仅因为 Docker 公开了一个端口并不意味着它实际上在内部侦听容器进程。换句话说,由于启用了 SSL,因此可能会禁用非 SSL。端口映射可能只是容器中的一个错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2018-05-07
    • 2016-02-28
    • 2021-09-15
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多