1

我正在研究将通道实现从内存更改为 Kafka 的好处。我知道 inmemorychannel 不是持久的,而 Kafkachannel 是。

所以我假设 Kafkachannel 会像这样工作:

  1. 当一个 channelPod(kafka-ch-dispatcher Pod)在通过 Kafkachannel 注册的事件交付到 sink 之前宕机时,宕机前注册的事件会保留在 Kafkatopic 中。
  2. 当 kafka-ch-dispatcher 恢复时,Kafkatopic 中任何未投递到 sink 的事件都会被发送到 sink。

为了验证这个假设,我在确认向 Kafkatopic 注册的事件尚未交付后,杀死了 kafka-ch-dispatcher Pod。正如预期的那样,Kafkatopic 仍然有事件。然而,在等待之后,该事件从未交付到接收器。

我的假设错了吗?

还是确认方法不对?(有没有很好的方法来验证 Kafkachannel 持久性?)

我使用的频道和订阅如下。我在 knativetorial 命名空间中运行它们。

# kubectl get cm -n knative-eventing default-ch-webhook -ojsonpath='{.data.default-ch-c
onfig}'
clusterDefault:
  apiVersion: messaging.knative.dev/v1alpha1
  kind: InMemoryChannel
namespaceDefaults:
  knativetutorial:
    apiVersion: messaging.knative.dev/v1alpha1
    kind: KafkaChannel
    spec:
      numPartitions: 1
      replicationFactor: 1

# cat channel_svc.yaml
apiVersion: messaging.knative.dev/v1beta1
kind: Channel
metadata:
  name: event-display-ch

# cat event-display-sub-retry_svc.yaml
apiVersion: messaging.knative.dev/v1beta1
kind: Subscription
metadata:
  name: event-display-sub
spec:
  channel:
    apiVersion: messaging.knative.dev/v1beta1
    kind: Channel
    name: event-display-ch
  delivery:
    backoffDelay: PT1.0S
    backoffPolicy: linear
    retry: 10
    deadLetterSink:
      ref:
        apiVersion: v1
        kind: Service
        name: event-dead
  subscriber:
    ref:
      apiVersion: v1
      kind: Service
      name: event-display
4

0 回答 0