4.8. 事件交付
您可以配置事件交付参数,当事件无法发送到事件 sink 时。配置事件交付参数,包括死信接收器,可确保重试任何无法发送到事件接收器的事件。否则,未验证的事件将被丢弃。
4.8.1. 频道和代理的事件交付行为模式
不同的频道和代理类型都有自己的行为模式,用于事件交付。
4.8.1.1. Apache Kafka 的 Knative 频道和代理
如果事件成功传送到 Kafka 频道或代理接收器,接收器会使用一个 202
状态代码进行响应,这意味着该事件已被安全地存储在 Kafka 主题中且不会丢失。
如果接收器使用任何其他状态代码响应,则事件不会被安全存储,用户必须执行步骤来解决这个问题。
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>
。
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> ...
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>