如何配置每个 pod/进程使用不同的 kafka 主题分区

2023-12-27

我有一个有 5 个分区的 kafka 主题。我当前有 5 个 pod 正在使用这 5 个分区。但是,由于特定需求,我需要每个 Pod 仅从其分配的分区中进行消费。但由于 pod 在 kubernetes 上都具有相同的配置,我无法告诉每个 pod 给消费者哪个分区。实现这一目标的最佳方法是什么?我应该只进行 5 个独立部署吗?

这 5 个都具有相同的代码,这看起来很奇怪。我见过有状态集的使用,但这似乎依赖于索引。不确定这种方法有多稳健。


如果您能够将部署更改为有状态集,则副本的每个 pod 将包含一个从 0 开始的序列号。pod 名称是固定的,如 my-kafka-consumer-0、my-kafka-consumer-1、my- kafka-consumer-(N-1),等等。

接下来,您应该使用 podname 作为 pod 内的环境变量,应用程序可以读取它。

您可以通过设置环境变量来做到这一点,如下所示:

env:
  - name: MY_POD_NAME
    valueFrom:
      fieldRef:
        fieldPath: metadata.name

如果完成此操作,您的应用程序应该能够从环境变量中读取此信息。这是识别消费者组内的消费者所必需的。

因此,您接下来要寻找的就是 kafka 客户端配置中的静态成员资格。

您可以通过设置 group.id 和 group.instance.id 来实现此目的

'group.id': 'consumer-group'
'group.instance.id': '<MY_POD_NAME FROM THE ENVIRONMENT VARS>'

未经测试,但我认为这应该可以解决问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何配置每个 pod/进程使用不同的 kafka 主题分区 的相关文章

随机推荐