java—如何在kubernetes multipod部署中使用spring kafka处理kafka容器生命周期

7gs2gvoe  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(231)

我正在使用springkafka实现,需要通过restapi启动和停止kafka消费者。为此,我正在使用Kafka列斯泰纳注册表
endpointregistry.getlistenercontainer(“consumer1”).stop();
endpointregistry.getlistenercontainer(“consumer1”).start();
我们正在kubernetes吊舱上部署微服务,因此同一个微服务可能有多个部署。如何启动和停止所有容器上的消费者。

xhv8bpkk

xhv8bpkk1#

kubernetes不提供任何自动向所有pod广播http请求的服务;所以你得自己动手。
Kafka广播
您可以将从接收http请求的单个示例发布的start/stop命令发布到一个主题,该主题专用于在所有示例之间广播命令。
当然,您必须确保每个示例都可以读取该主题上的所有消息,因此需要防止分区在这些示例之间保持平衡。您可以通过在该主题的使用者上设置唯一的组id(例如,用uuid作为普通组id的后缀)来实现这一点。
通过http广播
kubernetes知道哪些pod正在监听哪些端点,您可以在服务中获得这些信息。KubernetesSpring Cloud(https://cloud.spring.io/spring-cloud-static/spring-cloud-kubernetes/2.0.0.m1/reference/html/#ribbon-在Kubernetes的发现)使得获得这些信息变得很容易;可能有很多不同的方法可以做到这一点,对于spring cloud kubernetes,它会是这样的:
在随机选择的pod上接收命令,从功能区获取服务的serverlist(它包含所有示例以及可以访问它们的ip地址/端口),并向每个示例发送一个新的http请求。
我更喜欢kafka方法的健壮性,如果您已经在使用springcloud,那么http方法可能更容易实现。

相关问题