当前位置: 首页 > 知识库问答 >
问题:

Kafka在Strimzi上的部署

游鸣
2023-03-14

我正在尝试使用 Strimzi 部署 Kafka,问题是,它将 Kafka 代理暴露为负载均衡器并为其分配外部 IP。我希望 Kafka 代理在内部可用,并且仅通过负载均衡器公开。下面是我的部署文件。

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    version: 3.1.0
    replicas: 2
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: external
        port: 9094
        type: loadbalancer
        tls: false
    config:
      offsets.topic.replication.factor: 2
      transaction.state.log.replication.factor: 2
      transaction.state.log.min.isr: 2
      default.replication.factor: 2
      min.insync.replicas: 2
      inter.broker.protocol.version: "3.1"
    storage:
      type: ephemeral
  zookeeper:
    replicas: 2
    storage:
      type: ephemeral

下面的集群截图

如您所见,有 3 个分配了外部 IP 的负载均衡器,而我希望它是一个具有外部 IP 的负载均衡器和 2 个 Kafka 代理。

共有2个答案

邓德厚
2023-03-14

是的,基于Kafka发现协议,这种行为是正确的。所以首先让我们了解一下-

  1. 经过身份验证的Kafka客户端在第一次连接期间连接到任何代理(这是使用库伯内特斯服务完成的)
  2. 代理返回一个/多个主题的元数据
  3. 在获得所需领导者分区的详细信息后,客户端打开到该特定代理的新连接。即使客户端需要连接到第一个代理,它也会终止现有连接(#1)并与该代理启动新连接。

现在我们知道Kafka客户端直接连接到代理以发送/接收记录,负载均衡器只出现在初始连接的画面中,它将客户端重定向到任何一个可用的代理。现在假设,如果我们也将负载均衡器用于后续连接,会发生什么——负载均衡器将客户端连接到任何可用的代理,这些代理可能有也可能没有客户端想要连接的分区领导者。所以Kafka使用上面描述的发现协议来处理这个事情。

朱刚捷
2023-03-14

这是因为Kafka的设计方式。客户端需要能够直接访问集群中的每个代理。因此,负载均衡器虽然可以方便地公开集群,但并没有真正对任何内容进行负载均衡。它只是路由连接。您可以在以下博客文章中找到有关它如何以及为什么像这样工作的更多详细信息:https://strimzi.io/blog/2019/04/17/accessing-kafka-part-1/

 类似资料:
  • Run Apache Kafka on Kubernetes and OpenShift Strimzi provides a way to run an Apache Kafka cluster onKubernetes or OpenShift in various deployment configurations.See our website for more details about

  • 这对社区来说是一个非常普遍的问题,尤其是Kafka·斯特里姆齐桥的人,如果他们正在读这本书的话。 我正在尝试将他们的Apache Kafka HTTP Bridge作为POC来实现。文档非常糟糕,无法提供任何帮助。我真的只需要知道如何使用桥发布和使用来自Kafka主题的消息。我已经开始了这座桥,但由于文档缺乏基本示例,我不知道除此之外的任何事情。

  • 我有两个集群, 一个集群安装了我的应用程序微服务,另一个集群安装了Strimzi kafka。两者都是私有的GKE集群。 我的挑战是如何从我的应用程序连接到这个 kafka。大约有 10 个微服务正在运行,每个微服务都必须连接到 kafka。 我现在有一种方法,将Strimzi kafka作为Nodeport服务,并在应用程序代码中提供Ip和nodeIp。 这种方法的问题在于,如果 GKE 节点自

  • 我正在使用 strimzi 运算符并在 k8s 上运行 kafka 集群。我想使用 Kafka Mirror Maker,我使用 CRD yml 部署了 Kafka Mirror Maker,但我的 KMM pod 处于崩溃环回状态。我不明白问题是什么?这是我的Kafka MirrorMaker yml 还有我的Kafka集群yml: 我的第二个Kafka集群: 我的窗格列表及其状态: 吊舱日志:

  • Strimzi提供了一种在各种部署配置中在OpenShift和Kubernetes上运行Apache Kafka集群的方法。 在使用Strimzi项目时,使用Kubernetes和OKD(适用于Red Hat OpenShift)启动和运行Apache Kafka集群可以非常简单! Strimzi基于Apache Kafka 2.1.0,包含三个主要组件: 集群运营者 负责在OpenShift或K

  • 按照这里的讨论,我使用以下步骤使外部客户端(基于 kafkajs)连接到 OpenShift 上的 Strimzi。这些步骤从这里开始。 被编辑为如下所示。 要提取证书并在客户端中使用它,我运行了以下命令: 请注意,我必须在我的macOS上使用,而不是,如留档所示。 这是从他们的 页面和他们的文档改编的客户端。 当我从具有的文件夹运行时,我收到一条连接拒绝消息。 我错过了什么?