如何验证 Kafkachannel 持久性?

问题描述

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

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

  1. 一个 channelPod(kafk-ch-dispatcher Pod)在通过 Kafkachannel 注册的事件被传递到接收器之前宕机时,宕机前注册的事件会保留在 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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)