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



我有一个kafka主题,它有5个分区。我有5个pod正在使用这5个分区。但是,由于特殊需要,我需要每个pod只使用其分配的分区。但是由于pod在kubernetes上都具有相同的配置,我无法告诉每个pod使用哪个分区。实现这一目标的最佳方式是什么?我应该有5个独立的部署吗?

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

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

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

你可以这样设置env变量:

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

如果这样做,应用程序应该能够从环境变量中读取这些信息。这是识别消费者组中的消费者所需要的。

所以接下来你要找的是kafka客户端配置中的静态成员。

您可以通过设置组来达到此目的。Id和group.instance.id

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

没有经过测试,但我认为这应该能奏效。

最新更新