我正在研究将通道实现从内存更改为 Kafka 的好处。我知道 inmemorychannel 不是持久的,而 Kafkachannel 是。
所以我假设 Kafkachannel 会像这样工作:
- 当一个 channelPod(kafka-ch-dispatcher Pod)在通过 Kafkachannel 注册的事件交付到 sink 之前宕机时,宕机前注册的事件会保留在 Kafkatopic 中。
- 当 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