使用kafka服务进行灰度发布实现方案

背景

2022年6月8日的时候,有服务需要进行灰度发布,但是,这些服务使用到了Kafka,所以无法像普通的http服务那样使用nginx进行引流。
所以,那些HW的大佬就在会议上讨论了,最终也没有得出一个方案出来。
但是,我想到了一个方案,但是又想想在项目组中的待遇,算了算了,何必多管闲事,说出来也不会改变什么,现在周末有空了,我还是以博客的方式记下自己的方案,毕竟是是自己想出来了,仅供参考。

kafka服务调用

生产环境服务调用

在这里插入图片描述

灰度发布服务调用

在这里插入图片描述

kafka灰度发布的难点

因为消费者监听同一个topic,灰度节点的生产者/Kafka无法实现把消息送到指定的消费者服务中。

灰度实现方案

在这里插入图片描述
方案说明:

  1. 保证在服务B处的监听topic1的方法A处,通过消息体以及查询数据库,判断该服务节点是否为灰度节点。
  2. 如果是灰度节点/非灰度节点,就把消息转发到kafka上,注意,这时候的topic必须和灰度节点/非灰度节点的IP绑定或者关联的,topic必须保证唯一。
  3. 最后,服务B也监听一个以自己IP关联的topic进行消费。

总结

  1. 经过了二次转发,可能会导致消息的丢失,所以需要根据业务确定是否应该开启消息确认机制。
  2. 如果消息量特别大,建议kafka集群需要准备2个。