目标:
我们希望在同一个 Openshift 中支持多个环境。我们使用成员卷中定义的服务网格控制计划和命名空间作为每个环境的边界。每个环境还有自己的 Kafka 集群,使用 Openshift AMQP 运算符安装。
我们还安装了 Openshift serverless Operator 并部署了 Knative Eventing 控制平面(以及 Knative Serving 控制平面)。我们发现每个集群中只能安装一个 Knative 事件控制平面,因为它仅限于某个命名空间名称,并且一个命名空间中只能有一个控制平面 对于每个环境,都有一些 Knative 通道(我们使用通道/订阅模型,但我们也可以使用代理和触发器(如果这解决了问题),它们由该环境的 kafka 集群支持。
我们使用订阅将事件推送到 Knative 服务。
问题:
kafka bootstrap 服务器域似乎是在控制平面(特别是 KnativeKafka 资源)中配置的,每个 openshift 集群只能有一个。这意味着我们可以确保一个环境中的数据/事件最终位于同一环境中的 kafka 集群中。
如何在同一个集群中创建两个 Knative 通道,但以这样一种方式进行配置,以便保证每个通道的事件最终出现在不同的 kafka 集群中,并且都在同一个 openshift 集群中?
详情:
Openshift v4.14.12_1552
红帽 AMQP 流 v2.6.0-1
用途:
Openshift 无服务器 v1.31.1
用途:
每个代理都可以配置为使用单独的配置(在代理
.spec.config
中引用)。在此配置中,您可以配置引导服务器(请参阅配置 kafka 代理)。
因此,您可以使用如下所示的内容来配置您的代理以使用“专用”代理配置:
apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
annotations:
eventing.knative.dev/broker.class: Kafka
name: my-broker
spec:
config:
apiVersion: v1
kind: ConfigMap
name: my-broker-config
namespace: my-ns
然后是你的 Broker 配置映射(可以被多个 Broker 引用)
apiVersion: v1
kind: ConfigMap
metadata:
name: my-broker-config
namespace: my-ns
data:
bootstrap.servers: "my-cluster-kafka-bootstrap-123.kafka:9092"
default.topic.partitions: "10"
default.topic.replication.factor: "3"