在 kubernetes 上以分布式模式部署 kafka 连接器的最佳实践

Posted

技术标签:

【中文标题】在 kubernetes 上以分布式模式部署 kafka 连接器的最佳实践【英文标题】:Best practice deploying kafka connector in a distributed mode on kubernetes 【发布时间】:2020-08-03 08:49:37 【问题描述】:

我是 Kubernetes 新手,正在尝试在 kubernetes 上以分布式模式部署 kafka 连接器。我很清楚worker和connector属性的设置,但是kubernetes部署的最佳实践是什么?我是否应该部署两个 Pod,每个 Pod 有一个工作人员,两个 Pod 中的两个工作人员共享相同的消费者/生产者组 ID?还是其他配置,例如两个工人作为一个 pod 中的两个容器?我希望我的问题很清楚,非常感谢!

【问题讨论】:

【参考方案1】:

简答:

您应该部署两个或更多 pod,每个 pod 有一个消费者容器。

加长版:

这取决于您要达到的目标。 Pod 是 Kubernetes 世界中最小的可部署计算单元。如果两个或多个容器紧密耦合,它们应该并排放置在一个 pod 中。

对于您当前的用例,使用 Kubernetes(在许多其他用例之外)的好处是您可以通过增加副本轻松地水平扩展消费者数量,从而增加 pod 的数量。这些消费者需要共享相同的消费者组 id。 (制作人的故事也差不多)

希望有帮助!

【讨论】:

谢谢!这是非常有帮助的。我只有两个后续问题:1)当您看到“紧密耦合”时,什么是一个好的用例? 2)对于分布式模式的kafka连接器,worker会有不同的rest.port号,但是共享group-id。所以它不能仅仅通过增加副本来水平缩放。如果我错了,请纠正我。 1) 紧密耦合的容器可以用于监控或日志转发,它需要靠近主容器并访问它推送到其他地方的数据。 2)我不明白为什么您需要为消费者提供不同的端口号。只要它们位于自己的 pod 中,它们之间就不会发生端口冲突。 我的意思是在分布式模式下配置不同的worker,每个worker需要不同的rest.port号。 docs.confluent.io/current/connect/userguide.html 实际上,如果每个工作人员都坐在自己的 pod 中,您就不会这样做,因为 pod 会有自己的内部 IP。你能试试看是否有效吗? 所以如果我们不给不同的 pod/worker 提供不同的 rest.port 号,那么它就像副本大小为 2 的 pod。我不认为它会是真实的分布式模式。一项工作结束后,您能否在其他工人之间重新平衡连接器?我不这么认为。

以上是关于在 kubernetes 上以分布式模式部署 kafka 连接器的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

在Kubernetes上部署Redis集群

关于在hadoop上以分布式模式运行的hbase

Flink集群部署模式

无法在 Ubuntu (16.04) 上以伪模式启动 Hadoop (3.1.0)

Loki 日志系统分布式部署实践三 redis

云原生之kubernetes实战在k8s环境下部署Spark分布式计算平台