5.4. 代理(Broker)
5.4.1. 代理(Broker)
代理可与触发器结合使用,用于将事件源发送到事件 sink。事件从事件源发送到代理,作为 HTTP POST
请求。事件进入代理后,可使用触发器根据 CloudEvent 属性 进行过滤,并作为 HTTP POST
请求发送到事件 sink。
5.4.2. 代理类型
集群管理员可为集群设置 default 代理实施。创建代理时,会使用默认代理实现,除非在 Broker
对象中提供配置。
5.4.2.1. 用于开发的默认代理实现
Knative 提供基于频道的默认代理实现。这个基于频道的代理可用于开发和测试目的,但不为生产环境提供适当的事件交付保证。默认代理由 InMemoryChannel
频道实现支持。
如果要使用 Kafka 降低网络跃点,请使用 Kafka 代理实现。不要将基于频道的代理配置为由 KafkaChannel
频道实现支持。
5.4.2.2. 生产环境就绪的 Kafka 代理实现
对于生产环境就绪的 Knative Eventing 部署,红帽建议您使用 Knative Kafka 代理实现。Kafka 代理是 Knative 代理的 Apache Kafka 原生实现,它将 CloudEvents 直接发送到 Kafka 实例。
Kafka 代理禁用联邦信息处理标准 (FIPS) 模式。
Kafka 代理具有与 Kafka 的原生集成,用于存储和路由事件。它可以更好地与 Kafka 集成用于代理,并在其他代理类型中触发模型,并减少网络跃点。Kafka 代理实现的其他优点包括:
- 最少一次的交付保证
- 根据 CloudEvents 分区扩展排序事件交付
- 数据平面的高可用性
- 水平扩展数据平面
Knative Kafka 代理使用二进制内容模式将传入的 CloudEvents 存储为 Kafka 记录。这意味着,所有 CloudEvent 属性和扩展都会在 Kafka 记录上映射,而 CloudEvent 的 data
规格与 Kafka 记录的值对应。
5.4.3. 创建代理
Knative 提供基于频道的默认代理实现。这个基于频道的代理可用于开发和测试目的,但不为生产环境提供适当的事件交付保证。
如果集群管理员将 OpenShift Serverless 部署配置为使用 Kafka 作为 default 代理类型,使用默认设置创建代理会创建一个基于 Kafka 的代理。
如果您的 OpenShift Serverless 部署没有配置为使用 Kafka 代理作为 default 代理类型,则按照以下流程中的默认设置时会创建基于频道的代理。
5.4.3.1. 使用 Knative CLI 创建代理
代理可与触发器结合使用,用于将事件源发送到事件 sink。通过使用 Knative (kn
) CLI 创建代理,通过直接修改 YAML 文件来提供更简化的、直观的用户界面。您可以使用 kn broker create
命令创建代理。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建代理:
$ kn broker create <broker_name>
验证
使用
kn
命令列出所有现有代理:$ kn broker list
输出示例
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True
可选:如果使用 OpenShift Container Platform Web 控制台,在 Developer 视角中进入 Topology 视图来查看存在的代理:
5.4.3.2. 通过注解触发器来创建代理
代理可与触发器结合使用,用于将事件源发送到事件 sink。您可以通过将 eventing.knative.dev/injection: enabled
注解添加到 Trigger
对象来创建代理。
如果您使用 eventing.knative.dev/injection: enabled
注解创建代理,则在没有集群管理员权限的情况下无法删除该代理。如果您在集群管理员还没有删除此注解前删除了代理,则代理会在删除后再次被创建。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
安装 OpenShift CLI (
oc
) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建一个
Trigger
对象作为 YAML 文件,该文件带有eventing.knative.dev/injection: enabled
注解:apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: annotations: eventing.knative.dev/injection: enabled name: <trigger_name> spec: broker: default subscriber: 1 ref: apiVersion: serving.knative.dev/v1 kind: Service name: <service_name>
- 1
- 指定触发器将事件发送到的事件 sink 或 subscriber。
应用
Trigger
YAML 文件:$ oc apply -f <filename>
验证
您可以使用 oc
CLI,或使用 web 控制台中的 Topology 视图来验证代理是否已成功创建。
输入以下
oc
命令来获取代理:$ oc -n <namespace> get broker default
输出示例
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s
可选:如果使用 OpenShift Container Platform Web 控制台,在 Developer 视角中进入 Topology 视图来查看存在的代理:
5.4.3.3. 通过标记命名空间来创建代理
代理可与触发器结合使用,用于将事件源发送到事件 sink。您可以通过标记您拥有的命名空间或具有写入权限来自动创建 default
代理。
如果您删除该标签,则不会删除使用这个方法创建的代理。您必须手动删除它们。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
安装 OpenShift CLI (
oc
) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
使用
eventing.knative.dev/injection=enabled
标识一个命名空间:$ oc label namespace <namespace> eventing.knative.dev/injection=enabled
验证
您可以使用 oc
CLI,或使用 web 控制台中的 Topology 视图来验证代理是否已成功创建。
使用
oc
命令获取代理:$ oc -n <namespace> get broker <broker_name>
示例命令
$ oc -n default get broker default
输出示例
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s
可选:如果使用 OpenShift Container Platform Web 控制台,在 Developer 视角中进入 Topology 视图来查看存在的代理:
5.4.3.4. 删除通过注入创建的代理
如果通过注入创建了一个代理并在以后需要删除它时,您必须手动删除它。如果删除了标签或注解,则使用命名空间标签或触发器注解创建的代理不会被永久删除。
先决条件
-
安装 OpenShift CLI (
oc
) 。
流程
从命名空间中删除
eventing.knative.dev/injection=enabled
标识:$ oc label namespace <namespace> eventing.knative.dev/injection-
移除注解可防止 Knative 在删除代理后重新创建代理。
从所选命名空间中删除代理:
$ oc -n <namespace> delete broker <broker_name>
验证
使用
oc
命令获取代理:$ oc -n <namespace> get broker <broker_name>
示例命令
$ oc -n default get broker default
输出示例
No resources found. Error from server (NotFound): brokers.eventing.knative.dev "default" not found
5.4.3.5. 使用 Web 控制台创建代理
在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建代理。使用 OpenShift Container Platform Web 控制台提供了一个简化的用户界面来创建代理。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
-
在 Developer 视角中,进入到 +Add
Broker。此时会显示 Broker 页面。 -
可选。更新代理的名称。如果您没有更新名称,则生成的代理名为
default
。 - 点 Create。
验证
您可以通过在 Topology 页面中查看代理组件来验证代理是否已创建。
- 在 Developer 视角中,导航到 Topology。
查看
mt-broker-ingress
、mt-broker-filter
和mt-broker-controller
组件。
5.4.3.6. 使用 Administrator 视角创建代理
代理可与触发器结合使用,用于将事件源发送到事件 sink。事件从事件源发送到代理,作为 HTTP POST
请求。事件进入代理后,可使用触发器根据 CloudEvent 属性 进行过滤,并作为 HTTP POST
请求发送到事件 sink。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已登录到 Web 控制台,且处于 Administrator 视角。
- 具有集群管理员 OpenShift Container Platform 的权限。
流程
-
在 OpenShift Container Platform Web 控制台的 Administrator 视角中,导航到 Serverless
Eventing。 - 在 Create 列表中,选择 Broker。您将进入 Create Broker 页面。
- 可选:修改代理的 YAML 配置。
- 点 Create。
5.4.3.7. 后续步骤
- 配置事件交付参数,当事件无法发送到事件 sink 时。请参阅配置事件交付参数的示例。
5.4.3.8. 其他资源
5.4.4. 配置默认代理支持频道
如果您使用基于频道的代理,您可以将代理的默认后备频道类型设置为 InMemoryChannel
或 KafkaChannel
。
先决条件
- 在 OpenShift Container Platform 上具有管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
已安装 OpenShift (
oc
) CLI。 -
如果要使用 Kafka 频道作为默认后备频道类型,还必须在集群中安装
KnativeKafka
CR。
流程
修改
KnativeEventing
自定义资源 (CR)以添加config-br-default-channel
配置映射的配置详情:apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventing spec: config: 1 config-br-default-channel: channel-template-spec: | apiVersion: messaging.knative.dev/v1beta1 kind: KafkaChannel 2 spec: numPartitions: 6 3 replicationFactor: 3 4
应用更新的
KnativeEventing
CR:$ oc apply -f <filename>
5.4.5. 配置默认代理类
您可以使用 config-br-defaults
配置映射来指定 Knative Eventing 的默认代理类设置。您可以为整个集群或一个或多个命名空间指定默认代理类。目前,支持 MTChannelBasedBroker
和 Kafka
代理类型。
先决条件
- 在 OpenShift Container Platform 上具有管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
如果要使用 Kafka 代理作为默认代理实现,还必须在集群中安装
KnativeKafka
CR。
流程
修改
KnativeEventing
自定义资源,以添加config-br-defaults
配置映射的配置详情:apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventing spec: defaultBrokerClass: Kafka 1 config: 2 config-br-defaults: 3 default-br-config: | clusterDefault: 4 brokerClass: Kafka apiVersion: v1 kind: ConfigMap name: kafka-broker-config 5 namespace: knative-eventing 6 namespaceDefaults: 7 my-namespace: brokerClass: MTChannelBasedBroker apiVersion: v1 kind: ConfigMap name: config-br-default-channel 8 namespace: knative-eventing 9 ...
- 1
- Knative Eventing 的默认代理类。
- 2
- 在
spec.config
中,您可以指定您要为修改的配置添加的配置映射。 - 3
config-br-defaults
配置映射指定任何没有指定spec.config
设置或代理类的代理的默认设置。- 4
- 集群范围的默认代理类配置。在本例中,集群的默认代理类实现是
Kafka
。 - 5
kafka-broker-config
配置映射指定 Kafka 代理的默认设置。请参阅 "Additional resources" 部分的"配置 Kafka 代理设置"。- 6
- 存在
kafka-broker-config
配置映射的命名空间。 - 7
- 命名空间范围的默认代理类配置。在本例中,
my-namespace
命名空间的默认代理类实现是MTChannelbasedBroker
。您可以为多个命名空间指定默认代理类实现。 - 8
config-br-default-channel
配置映射指定代理的默认后备频道。请参阅"Additional resources"部分的"配置默认代理支持频道"部分。- 9
config-br-default-channel
配置映射所在的命名空间。
重要配置特定于命名空间的默认设置会覆盖任何集群范围的设置。
5.4.6. Kafka 代理
对于生产环境就绪的 Knative Eventing 部署,红帽建议您使用 Knative Kafka 代理实现。Kafka 代理是 Knative 代理的 Apache Kafka 原生实现,它将 CloudEvents 直接发送到 Kafka 实例。
Kafka 代理禁用联邦信息处理标准 (FIPS) 模式。
Kafka 代理具有与 Kafka 的原生集成,用于存储和路由事件。它可以更好地与 Kafka 集成用于代理,并在其他代理类型中触发模型,并减少网络跃点。Kafka 代理实现的其他优点包括:
- 最少一次的交付保证
- 根据 CloudEvents 分区扩展排序事件交付
- 数据平面的高可用性
- 水平扩展数据平面
Knative Kafka 代理使用二进制内容模式将传入的 CloudEvents 存储为 Kafka 记录。这意味着,所有 CloudEvent 属性和扩展都会在 Kafka 记录上映射,而 CloudEvent 的 data
规格与 Kafka 记录的值对应。
5.4.6.1. 当配置为 default 代理类型时,创建 Kafka 代理
如果您的 OpenShift Serverless 部署没有配置为使用 Kafka 代理作为默认代理类型,您仍可使用以下步骤创建基于 Kafka 的代理。
5.4.6.1.1. 使用 YAML 创建 Kafka 代理
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述应用程序,并以可重复的方式描述应用程序。要使用 YAML 创建 Kafka 代理,您必须创建一个 YAML 文件来定义 Broker
对象,然后使用 oc apply
命令应用它。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka
自定义资源已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc
)。
流程
创建一个基于 Kafka 的代理作为 YAML 文件:
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: annotations: eventing.knative.dev/broker.class: Kafka 1 name: example-kafka-broker spec: config: apiVersion: v1 kind: ConfigMap name: kafka-broker-config 2 namespace: knative-eventing
应用基于 Kafka 的代理 YAML 文件:
$ oc apply -f <filename>
5.4.6.1.2. 创建使用外部管理的 Kafka 主题的 Kafka 代理
如果要在不创建自己的内部主题的情况下使用 Kafka 代理,您可以使用外部管理的 Kafka 主题。要做到这一点,您必须创建一个使用 kafka.eventing.knative.dev/external.topic
注解的 Kafka Broker
对象。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka
自定义资源已安装在 OpenShift Container Platform 集群中。 - 您可以访问一个 Kafka 实例,如 Red Hat AMQ Streams,并创建了 Kafka 主题。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc
)。
流程
创建一个基于 Kafka 的代理作为 YAML 文件:
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: annotations: eventing.knative.dev/broker.class: Kafka 1 kafka.eventing.knative.dev/external.topic: <topic_name> 2 ...
应用基于 Kafka 的代理 YAML 文件:
$ oc apply -f <filename>
5.4.6.2. 配置 Kafka 代理设置
您可以通过创建配置映射并在 Kafka Broker
对象中引用此配置映射,配置复制因素、bootstrap 服务器和 Kafka 代理的主题分区数量。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka
自定义资源(CR)已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc
)。
流程
修改
kafka-broker-config
配置映射,或创建自己的配置映射来包含以下配置:apiVersion: v1 kind: ConfigMap metadata: name: <config_map_name> 1 namespace: <namespace> 2 data: default.topic.partitions: <integer> 3 default.topic.replication.factor: <integer> 4 bootstrap.servers: <list_of_servers> 5
重要default.topic.replication.factor
值必须小于或等于集群中的 Kafka 代理实例数量。例如,如果您只有一个 Kafka 代理,则default.topic.replication.factor
值应该不超过"1"
。Kafka 代理配置映射示例
apiVersion: v1 kind: ConfigMap metadata: name: kafka-broker-config namespace: knative-eventing data: default.topic.partitions: "10" default.topic.replication.factor: "3" bootstrap.servers: "my-cluster-kafka-bootstrap.kafka:9092"
应用配置映射:
$ oc apply -f <config_map_filename>
指定 Kafka
Broker
对象的配置映射:Broker 对象示例
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: name: <broker_name> 1 namespace: <namespace> 2 annotations: eventing.knative.dev/broker.class: Kafka 3 spec: config: apiVersion: v1 kind: ConfigMap name: <config_map_name> 4 namespace: <namespace> 5 ...
应用代理:
$ oc apply -f <broker_filename>
5.4.6.3. Knative Kafka 代理的安全配置
Kafka 集群通常使用 TLS 或 SASL 身份验证方法进行保护。您可以使用 TLS 或 SASL 将 Kafka 代理或频道配置为针对受保护的 Red Hat AMQ Streams 集群进行操作。
红帽建议您同时启用 SASL 和 TLS。
5.4.6.3.1. 为 Kafka 代理配置 TLS 身份验证
Apache Kafka 客户端和服务器使用 传输层安全性 (TLS) 来加密 Knative 和 Kafka 之间的流量,以及用于身份验证。TLS 是 Knative Kafka 唯一支持的流量加密方法。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka
CR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
您有一个 Kafka 集群 CA 证书存储为一个
.pem
文件。 -
您有一个 Kafka 集群客户端证书,并存储为
.pem
文件的密钥。 -
安装 OpenShift CLI (
oc
) 。
流程
在
knative-eventing
命名空间中创建证书文件作为 secret:$ oc create secret -n knative-eventing generic <secret_name> \ --from-literal=protocol=SSL \ --from-file=ca.crt=caroot.pem \ --from-file=user.crt=certificate.pem \ --from-file=user.key=key.pem
重要使用密钥名称
ca.crt
、user.crt
和user.key
。不要更改它们。编辑
KnativeKafka
CR,并在broker
spec 中添加对 secret 的引用:apiVersion: operator.serverless.openshift.io/v1alpha1 kind: KnativeKafka metadata: namespace: knative-eventing name: knative-kafka spec: broker: enabled: true defaultConfig: authSecretName: <secret_name> ...
5.4.6.3.2. 为 Kafka 代理配置 SASL 身份验证
Apache Kafka 使用 简单身份验证和安全层 (SASL) 进行身份验证。如果在集群中使用 SASL 身份验证,用户则必须向 Knative 提供凭证才能与 Kafka 集群通信,否则无法生成或消耗事件。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka
CR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您有一个 Kafka 集群的用户名和密码。
-
您已选择使用 SASL 机制,例如
PLAIN
、SCRAM-SHA-256
或SCRAM-SHA-512
。 -
如果启用了 TLS,您还需要 Kafka 集群的
ca.crt
证书文件。 -
安装 OpenShift CLI (
oc
) 。
流程
在
knative-eventing
命名空间中创建证书文件作为 secret:$ oc create secret -n knative-eventing generic <secret_name> \ --from-literal=protocol=SASL_SSL \ --from-literal=sasl.mechanism=<sasl_mechanism> \ --from-file=ca.crt=caroot.pem \ --from-literal=password="SecretPassword" \ --from-literal=user="my-sasl-user"
-
使用键名
ca.crt
,password
, 和sasl.mechanism
.不要更改它们。 如果要将 SASL 与公共 CA 证书搭配使用,您必须在创建 secret 时使用
tls.enabled=true
标志,而不是使用ca.crt
参数。例如:$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-literal=tls.enabled=true \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"
-
使用键名
编辑
KnativeKafka
CR,并在broker
spec 中添加对 secret 的引用:apiVersion: operator.serverless.openshift.io/v1alpha1 kind: KnativeKafka metadata: namespace: knative-eventing name: knative-kafka spec: broker: enabled: true defaultConfig: authSecretName: <secret_name> ...
5.4.6.4. 其他资源
5.4.7. 管理代理
Knative (kn
) CLI 提供了可用于描述和列出现有代理的命令。
5.4.7.1. 使用 Knative CLI 列出现有代理
使用 Knative (kn
) CLI 列出代理提供了精简且直观的用户界面。您可以使用 kn broker list
命令列出集群中的现有代理。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn
) CLI。
流程
列出所有存在的代理:
$ kn broker list
输出示例
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True
5.4.7.2. 使用 Knative CLI 描述现有代理
使用 Knative (kn
) 描述代理提供了精简且直观的用户界面。您可以使用 kn broker describe
命令通过 Knative CLI 输出集群中现有代理的信息。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn
) CLI。
流程
描述现有代理:
$ kn broker describe <broker_name>
使用 default broker 的命令示例
$ kn broker describe default
输出示例
Name: default Namespace: default Annotations: eventing.knative.dev/broker.class=MTChannelBasedBroker, eventing.knative.dev/creato ... Age: 22s Address: URL: http://broker-ingress.knative-eventing.svc.cluster.local/default/default Conditions: OK TYPE AGE REASON ++ Ready 22s ++ Addressable 22s ++ FilterReady 22s ++ IngressReady 22s ++ TriggerChannelReady 22s
5.4.8. 事件交付
您可以配置事件交付参数,当事件无法发送到事件 sink 时。配置事件交付参数,包括死信接收器,可确保重试任何无法发送到事件接收器的事件。否则,未验证的事件将被丢弃。
5.4.8.1. 频道和代理的事件交付行为模式
不同的频道和代理类型都有自己的行为模式,用于事件交付。
5.4.8.1.1. Knative Kafka 频道和代理
如果事件成功传送到 Kafka 频道或代理接收器,接收器会使用一个 202
状态代码进行响应,这意味着该事件已被安全地存储在 Kafka 主题中且不会丢失。
如果接收器使用任何其他状态代码响应,则事件不会被安全存储,用户必须执行步骤来解决这个问题。
5.4.8.2. 可配置事件交付参数
为事件交付配置以下参数:
- 死信接收器
-
您可以配置
deadLetterSink
交付参数,以便在事件无法发送时,它存储在指定的事件 sink 中。取消请求没有存储在死信接收器中的事件会被丢弃。死信接收器是符合 Knative Eventing sink 合同的任何可寻址对象,如 Knative 服务、Kubernetes 服务或一个 URI。 - Retries
-
您可以通过使用整数值配置重试 delivery 参数,在事件发送到 dead letter sink 前
重试
交付的次数。 - Back off 延迟
-
您可以设置
backoffDelay
交付参数,以在失败后尝试事件交付重试前指定延迟。backoffDelay
参数的持续时间使用 ISO 8601 格式指定。例如,PT1S
指定 1 秒延迟。 - Back off 策略
-
backoffPolicy
交付参数可以用来指定重试避退策略。该策略可以指定为linear
或exponential
。当使用linear
back off 策略时,back off 延迟等同于backoffDelay * <numberOfRetries>
。当使用exponential
backoff 策略时,back off 的延迟等于backoffDelay*2^<numberOfRetries>
。
5.4.8.3. 配置事件交付参数示例
您可以为 Broker
、Trigger
、Channel
和 Subscription
对象配置事件交付参数。如果您为代理或频道配置事件交付参数,这些参数会传播到为这些对象创建的触发器或订阅。您还可以为触发器或订阅设置事件交付参数,以覆盖代理或频道的设置。
Broker
对象示例
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: ... spec: delivery: deadLetterSink: ref: apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...
Trigger
对象示例
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: ... spec: broker: <broker_name> delivery: deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...
Channel
对象示例
apiVersion: messaging.knative.dev/v1 kind: Channel metadata: ... spec: delivery: deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...
Subscription
对象示例
apiVersion: messaging.knative.dev/v1 kind: Subscription metadata: ... spec: channel: apiVersion: messaging.knative.dev/v1 kind: Channel name: <channel_name> delivery: deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...
5.4.8.4. 为触发器配置事件交付顺序
如果使用 Kafka 代理,您可以将事件的交付顺序从触发器配置为事件 sink。
先决条件
- OpenShift Serverless Operator、Knative Eventing 和 Knative Kafka 安装在 OpenShift Container Platform 集群中。
- Kafka 代理被启用在集群中使用,您也创建了一个 Kafka 代理。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift (
oc
) CLI。
流程
创建或修改
Trigger
对象并设置kafka.eventing.knative.dev/delivery.order
注解:apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: <trigger_name> annotations: kafka.eventing.knative.dev/delivery.order: ordered ...
支持的消费者交付保证有:
unordered
- 未排序的消费者是一种非阻塞消费者,它能以未排序的方式提供消息,同时保持正确的偏移管理。
排序的
一个订购的消费者是一个按分区阻止消费者,在提供分区的下一个消息前等待来自 CloudEvent 订阅者成功响应。
默认排序保证是
unordered
。
应用
Trigger
对象:$ oc apply -f <filename>