无法向端口转发的 Kafka Pod 发送消息

问题描述 投票:0回答:1

我正在使用在 kubernetes 集群中运行的 Kafka pod(

incubator/kafka
图表),尝试发送和接收一些测试数据。我有一个正在运行的消费者,我开始使用它:

kubectl exec kafka-0 \
  -n kafka-namespace \
  -- kafka-console-consumer \
  --bootstrap-server localhost:9092 \
  --topic test

我能够使用以下方法成功地将数据发送给消费者:

kubectl exec -i kafka-0 \
  -n kafka-namespace \
  -- kafka-console-producer \
  --broker-list localhost:9092 \
  --topic test < testdata.jsonl

我想使用端口转发发送数据,因为这将使我更容易做一些分区工作。然而,它对我来说一直失败。我通过运行设置端口转发:

kubectl port-forward \
  -n kafka-namespace \
  svc/kafka 9092:9092

我正在尝试通过从本地计算机运行来将数据发送到 Kafka:

kafka-console-producer \
  --broker-list localhost:9092 \
  --topic test < testdata.jsonl

在我的端口转发终端中,我看到

Handling connection for 9092
出现。但是,这会失败并出现错误:

[2022-07-27 15:48:44,227] ERROR Error when sending message to topic test with key: null, value: 139 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Expiring 12 record(s) for test-0:120000 ms has passed since batch creation

如果我正在进行端口转发,那么我应该能够使用

kafka-console-producer
命令,就好像它在本地主机上运行一样,对吗?

kubernetes apache-kafka kafka-consumer-api portforwarding
1个回答
3
投票

简短的回答:不,端口转发不会(直接)工作。其次,整个

helm/charts
存储库已被弃用,并且 Kafka Chart 在 2020 年 11 月之后不再更新,这是我熟悉的唯一
incubator
存储库...

在任何情况下,具体而言,您需要在值文件中设置

external.enabled=true
以及一些其他值,这将创建一个可从 k8s 环境外部使用的服务资源。这将在 NodePort 上公开代理,因此不需要
kubectl port-forward
,而是直接使用公开的 pod。参考(向下滚动以搜索“外部”)- https://github.com/helm/charts/blob/master/incubator/kafka/README.md

例如:

values:
  rbac:
    create: true 
  externalAccess:
    enabled: true
    autoDiscovery:
      enabled: true
    service:
      type: NodePort
      port: 19092

除了

kafka-0-external
kafka
服务之外,这还将创建第三个名为
kafka-headless
的服务——至少对我来说是这样。然后您可以转发该服务。

您还可以使用

LoadBalancer
作为类型(当然要小心您向公众公开的内容)。

这是为了

bitnami/kafka:22.1.5

或者,您可以简单地在 Kafka pod 中使用

kubectl exec
,然后您就不需要任何网络设置,也不需要用 Kafka 下载来扰乱您的主机,因为 pod 将拥有您需要的所有脚本。

还值得一提的是,如果您想在 Kubernetes 中轻松使用 Kafka(以同时更新的方式),请使用 Operator,例如 https://strimzi.io

© www.soinside.com 2019 - 2024. All rights reserved.