【问题标题】:How to connect to Kafka in Kubernetes from outside?如何从外部连接到 Kubernetes 中的 Kafka?
【发布时间】:2019-03-26 11:58:48
【问题描述】:

挑战是创建一个 Kafka 生产者,该生产者从该集群外部连接到位于 Kubernetes 集群内的 Kafka 集群。我们有几个位于本地的 RDBMS 数据库,我们希望将数据直接流式传输到位于 AWS 上的 Kubernetes 中的 Kafka。我们已经尝试了一些方法并部署了 Confluent 开源平台,但到目前为止没有任何效果。有人对这个问题有明确的答案吗?

【问题讨论】:

  • 您到底尝试了什么?你检查过 Kafka Connect 吗?
  • 是的,我查看了 Kafka Connect,但更愿意创建直接连接到集群的生产者
  • 一般来说,你需要一个入口负载均衡器/代理控制器来让任何客户端从外部连接。
  • Kafka Connect 生产者
  • Kafka 集群说有 3 个代理。我们在 AWS 上为每个代理创建了 3 个 LB。不幸的是,这似乎根本不起作用。

标签: amazon-web-services kubernetes apache-kafka confluent-platform


【解决方案1】:

您可能会看看在 Kubernetes 中部署 Kafka Connect。由于您想从各种 RDMBS 数据库中复制数据,您需要设置 源连接器

源连接器提取整个数据库并流式传输表更新 到 Kafka 主题。它还可以从您的所有 应用服务器到 Kafka 主题中,使数据可用于 低延迟的流处理。

根据您的源数据库,您必须配置相应的connectors

如果您不熟悉 Kafka Connect,this article 可能会很有帮助,因为它解释了关键概念。

【讨论】:

  • 正如我上面的回答,我们有非常具体的工作负载,需要直接连接到集群。我们不想使用 REST Proxy 或类似的东西,只是直接将数据生成到 Kafka 主题。
【解决方案2】:

Kafka 客户端需要连接到特定节点来生产或消费消息。

kafka 协议可以连接任意节点获取元数据。然后客户端连接到一个特定的节点,该节点已被选为客户端想要生产/消费的分区的领导者。

每个 kafka pod 都必须可单独访问,因此每个 pod 都需要一个 L4 负载均衡器。可以在 kafka 配置中设置通告的侦听器配置,以便为内部和外部客户端通告不同的 IP/主机名。将 ADVERTISED_LISTENERS EXTERNAL 配置为使用负载均衡器,将 INTERNAL 配置为使用 pod IP。内部端口和外部端口必须不同。

结帐https://strimzi.io/https://bitnami.com/stack/kafkahttps://github.com/confluentinc/cp-helm-charts

更新:

正在尝试在 AWS EC2 中运行的 k8s 中安装 kafka。之间 confluent-operator、bitnami-kafka 和 strimzi,仅配置了 srimzi 负载均衡器的 kafka 设置中的 EXTERNAL。

bitnami-kafka 使用 无头服务,在 k8s 网络之外没有用处。 Confluent-operator 配置为节点的 IP,使其可访问 在 k8s 之外,但对于那些可以通过私有访问 EC2 实例的人 知识产权。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2019-07-31
    相关资源
    最近更新 更多