×

您可以配置在事件未能传递到事件接收器时应用的事件传递参数。不同的通道和代理类型具有其自身遵循的事件传递行为模式。

配置事件传递参数(包括死信接收器)可确保任何未能传递到事件接收器的事件都会被重试。否则,未传递的事件将被丢弃。

如果事件成功传递到 Apache Kafka 的通道或代理接收器,接收器将响应 202 状态码,这意味着事件已安全地存储在 Kafka 主题中,不会丢失。如果接收器响应任何其他状态码,则表示事件未安全存储,用户必须采取措施解决此问题。

可配置的事件传递参数

可以为事件传递配置以下参数

死信接收器

您可以配置deadLetterSink传递参数,以便如果事件未能传递,则将其存储在指定的事件接收器中。未存储在死信接收器中的未传递事件将被丢弃。死信接收器可以是任何符合 Knative Eventing 接收器契约的可寻址对象,例如 Knative 服务、Kubernetes 服务或 URI。

重试

您可以通过使用整数值配置retry传递参数,设置必须重试的最小次数,然后将事件发送到死信接收器。

回退延迟

您可以设置backoffDelay传递参数以指定在故障后尝试事件传递重试之前的延迟时间。backoffDelay参数的持续时间使用ISO 8601格式指定。例如,PT1S指定 1 秒的延迟。

回退策略

backoffPolicy传递参数可用于指定重试回退策略。策略可以指定为linearexponential。使用linear回退策略时,回退延迟等于backoffDelay * <numberOfRetries>。使用exponential回退策略时,回退延迟等于backoffDelay*2^<numberOfRetries>

配置事件传递参数的示例

您可以为BrokerTriggerChannelSubscription对象配置事件传递参数。如果为代理或通道配置事件传递参数,则这些参数将传播到为这些对象创建的触发器或订阅。您还可以设置触发器或订阅的事件传递参数以覆盖代理或通道的设置。

示例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>
# ...

为触发器配置事件传递顺序

如果您使用 Kafka 代理,则可以配置从触发器到事件接收器的事件传递顺序。

前提条件
  • 已在您的 OpenShift Container Platform 集群上安装 OpenShift Serverless Operator、Knative Eventing 和 Knative Kafka。

  • 已启用集群上的 Kafka 代理,并且您已创建了一个 Kafka 代理。

  • 您已创建项目或有权访问具有在 OpenShift Container Platform 中创建应用程序和其他工作负载的相应角色和权限的项目。

  • 您已安装 OpenShift (oc) 命令行界面。

步骤
  1. 创建或修改 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
    # ...

    支持的消费者交付保证:

    无序

    无序消费者是非阻塞式消费者,它以无序方式传递消息,同时保持正确的偏移量管理。

    有序

    有序消费者是每个分区阻塞式消费者,它会在交付分区的下一条消息之前等待来自 CloudEvent 订阅者的成功响应。

    默认排序保证为 unordered

  2. 应用 Trigger 对象

    $ oc apply -f <filename>