Knative Eventing Dead Letter Sink不触发问题排查及测试YAML求助
核心问题排查
你遇到的问题是两处配置错误导致DLQ规则未生效:
- 投递规则缩进错误:你提供的Subscription配置中,
retry、backoffDelay、backoffPolicy三个参数错误写在了deadLetterSink的子层级下,正确结构是这三个参数和deadLetterSink平级,同属于spec.delivery的子字段。该错误会导致Knative无法识别重试+DLQ规则,仅走默认投递逻辑,不会触发DLQ。 - Sequence场景DLQ配置位置错误:Broker层面配置的DLQ仅负责「Broker到Sequence入口」这一步的投递失败兜底,Sequence内部每一步的服务执行失败,由Sequence自动创建的内部Subscription负责投递,默认不会继承Broker的DLQ规则。Knative v0.26及以上版本支持直接在
Sequence.spec.delivery字段配置全局DLQ规则,更低版本需要给Sequence用到的每个Channel单独配置delivery规则。
服务返回非2xx状态码本身符合DLQ触发条件,你之前的场景未触发完全是配置错误导致。
最简可运行DLQ测试YAML
1. 部署测试服务和DLQ接收服务
# 返回500错误的测试服务 apiVersion: serving.knative.dev/v1 kind: Service metadata: name: cetf namespace: kafka spec: template: spec: containers: - image: gcr.io/knative-samples/knative-route-demo:blue env: - name: ERROR_CODE value: "500" --- # DLQ消息接收服务,会在日志中打印收到的云事件 apiVersion: serving.knative.dev/v1 kind: Service metadata: name: dlq namespace: kafka spec: template: spec: containers: - image: gcr.io/knative-releases/knative.dev/eventing/cmd/event_display:latest
2. 正确配置的KafkaChannel + Subscription
apiVersion: messaging.knative.dev/v1beta1 kind: KafkaChannel metadata: name: test-channel namespace: kafka spec: numPartitions: 3 replicationFactor: 1 --- apiVersion: messaging.knative.dev/v1 kind: Subscription metadata: name: test-sub namespace: kafka spec: channel: apiVersion: messaging.knative.dev/v1beta1 kind: KafkaChannel name: test-channel # 注意delivery层级结构,重试参数和deadLetterSink平级 delivery: retry: 1 backoffPolicy: linear backoffDelay: PT1S deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: dlq namespace: kafka subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: cetf
3. 支持DLQ的Sequence配置示例(Knative v0.26+)
apiVersion: flows.knative.dev/v1 kind: Sequence metadata: name: test-sequence namespace: kafka spec: steps: - ref: apiVersion: serving.knative.dev/v1 kind: Service name: cetf # 返回500的测试步骤 - ref: apiVersion: serving.knative.dev/v1 kind: Service name: normal-service # 正常处理服务 # 全局配置Sequence所有步骤的DLQ规则 delivery: retry: 1 backoffPolicy: linear backoffDelay: PT1S deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: dlq namespace: kafka
验证方法
给测试Channel或者Broker发送云事件后,查看dlq服务的Pod日志,即可看到投递失败的消息已经被转发到DLQ。
内容的提问来源于stack exchange,提问作者Leeish
相关产品推荐
相关产品推荐

