深入解读 Knative Eventing 0.7 版本新特性

简介: Knative Eventing 0.7 版本已经于 6 月 26 号正式发布。本次发布主要围绕重构 Channel 特性展开。本篇文章重点解读了这些特性,并且以此展望一下 Knative Eventing 后续版本的发展。

前言

Knative Eventing 0.7 版本已经于 6 月 26 号正式发布。本次发布主要围绕重构 Channel 特性展开。本篇文章重点解读了这些特性,并且以此展望一下 Knative Eventing 后续版本的发展。

新特性

重构 Channel

作为 Eventing v0.7 版本最大的特性, 重构了 Channel 的设计:为每个 Channel 单独创建了CRD资源。
在 Eventing v0.6 版本中, Channel 是通过 provisioner 模式实现的。以 kafka Channel 为例:

   apiVersion: eventing.knative.dev/v1alpha1
   kind: Channel
   metadata:
     name: my-kafka-channel
   spec:
     provisioner:
       apiVersion: eventing.knative.dev/v1alpha1
       kind: ClusterChannelProvisioner
       name: kafka

这里是通过指定名称为 kafka 的 ClusterChannelProvisioner。这样的实现方式存在以下问题:

  • Channel 中只通过一个 provisioner 字段就设置了包含的所有属性。
  • 每一个Channel Controller都会监听到所有的资源,再进行过滤。
  • Event Source中的实现方式更符合规范,即每个Source 单独的CRD和Controller,值得借鉴。

针对这些之前存在的不合理的设计, 在Eventing v0.7版本中,为每个Channel 单独创建了CRD资源,改造涉及如下:

  • InMemoryChannel CRD 替换 in-memory ClusterChannelProvisioner
  • KafkaChannel CRD 替换 kafka ClusterChannelProvisioner
  • NatssChannel CRD 替换 natss ClusterChannelProvisioner

改造后的 kafka Channel 示例如下:

   apiVersion: messaging.knative.dev/v1alpha1
   kind: KafkaChannel
   metadata:
     name: my-kafka-channel
   spec:
     numPartitions: 1
     replicationFactor: 3

另外这些现存的 ClusterChannelProvisioner,会在未来的版本中删除掉。

支持事件顺序处理(Sequence)

在 0.7 版本中定义了 Sequence CRD 资源用于简单的pipeine(F1->F2->F3),这个特性比较有意思,它可以将上一步处理的事件结果作为下一步的输入。类似图例:
image

在 Channel, Subscription, Broker, 以及 Trigger 中增强注释信息

在 Channel, Subscription, Broker, 以及 Trigger 中增加了创建和更新的用户信息。

事件追踪支持

  • Channel dispatchers 可以查看事件 Trace 信息
  • ClusterChannelProvisioners, Sources, 以及 Broker 中支持导出Trace信息到Zipkin。

事件源增强

  • ContainerSource 事件源支持设置PodTemplateSpec
  • CronJobSource 事件源支持设置resource limits 和 requests

其它变更

  • Eventing controller 在新版本中明确禁用 istio sidecar 注入Pod
  • 为Broker ingress 和 filter 定义全局的(如 knative-eventing 命名空间) ConfigMap。
  • 参考Serving中的策略,为Eventing中所有的资源对象打上eventing.knative.dev/release 标签, Value值可以设置为release 版本或者devel

升级与兼容

对于此次的变更,如升级到 Eventing 0.6版本需要关注一下几点:

  • 对于 kafka-channel-dispatcher StatefulSet 在新版本中不在安装,
  • 在0.7版本中in-memory-channel ClusterChannelProvisioner 已被移除掉。可以使用InMemoryChannel CRD替换原 in-memory-channel ClusterChannelProvisioner
  • Broker ingress pods 新版本会使用 eventing-broker-ingress ServiceAccount。如果之前创建的 Broker 没有使用eventing injection注释,需要手动创建所需的 ServiceAccount 和 RoleBindings。
  • webhook Deployment 在新版本中使用了 eventing-webhook Deployment 名称进行了替换。原有的webhook 会缩为 0 进行处理,接下来也会被移除掉。

总结

从本次 Knative Eventing 0.7 版本发布的特性不难看出,当前 Knative Eventing 在向前的迭代中不断优化设计,相信在接下来的版本中也会更多的聚焦设计优化,如计划在 v0.8 版本中完成 Source 到 Importer 的重命名改造等。

目录
相关文章
|
存储 域名解析 NoSQL
『MongoDB』MongoDB高可用部署架构——分片集群篇(Sharding)
📣读完这篇文章里你能收获到 - 为什么要使用分片 - Mongodb分片集群有哪些特点 - Mongodb分片集群的完整架构 - Mongodb分片集群数据分布方式 - Mongodb分片集群的设计思路 - Mongodb分片集群搭建及扩容 - 这篇文章强烈建议收藏!!!免得下次找不到
5071 2
『MongoDB』MongoDB高可用部署架构——分片集群篇(Sharding)
|
10月前
|
PyTorch API 算法框架/工具
DeepSeek 部署方式与技术实践
DeepSeek的部署灵活性使其在多个领域大放异彩,但需根据场景权衡性能、成本与安全性。随着工具生态的完善与行业方案的沉淀,2025年将成为AI大模型落地关键年。开发者应持续关注MoE、COT等技术创新,结合自身需求选择最优部署策略。
585 1
|
5月前
|
机器学习/深度学习 缓存 自然语言处理
30_情感分析变体详解:从极性到细粒度 - 深度解析与教学
情感分析(Sentiment Analysis),又称意见挖掘(Opinion Mining),是自然语言处理(NLP)领域的核心任务之一,旨在自动识别和提取文本中的情感信息。随着社交媒体的普及和用户生成内容的爆炸式增长,情感分析技术在商业决策、舆情监测、产品开发等领域发挥着越来越重要的作用。
|
编解码 开发者 Python
详解'unicodeescape' codec can't decode bytes in position 16-17: malformed \N character escape
遇到“`unicodeescape` codec can't decode bytes in position X-X: malformed \N character escape”错误时,首先不要慌张。通过逐步检查和修正代码中的Unicode转义序列,大多数情况下都能找到问题的根源并加以解决。有效利用Python的Unicode支持特性,可以优雅地处理各种复杂的字符编码问题。
535 3
一文彻底搞定电容元件
电容元件是电路中储存电荷的基本组件,通常用“C”表示,单位为法拉(F),常见单位有微法(μF)、纳法(nF)和皮法(pF)。电容具有“通交流,隔直流”的特性,主要用于储能、滤波、耦合与隔直等。根据安装方式可分为固定电容、可变电容和微调电容。其主要参数包括电容值、额定电压和损耗因数。电容广泛应用于电源滤波、信号处理及脉冲电路等领域。
1109 0
|
存储 应用服务中间件 云计算
深入解析:云计算中的容器化技术——Docker实战指南
【10月更文挑战第14天】深入解析:云计算中的容器化技术——Docker实战指南
628 1
|
存储 Java 编译器
String能存储多少个字符?
这篇内容讨论了Java中String的长度限制。编译时,如果字符串长度大于等于65535,编译器将报错。这是由于`CONSTANT_Utf8`常量池项的长度字段是16位无符号整数,最大值为65535。而在运行时,虽然理论上String的最大长度是2^31-1,但实际长度受限于JVM内存,最大可能占用约2GB内存,超过可能导致OutOfMemoryError。JDK9以后,对于LATIN1字符的字符串,存储优化使用byte数组,节省内存。
981 1
String能存储多少个字符?
|
前端开发 JavaScript 应用服务中间件
Nginx 开启 gzip 压缩,让网站飞一会!
一起来了解下nginx的gzip压缩
709 3
|
Android开发
Android中如何动态的调整Dialog的背景深暗
在Android开发中,Dialog和DialogFragment可通过设置`Window`的`backgroundDimAmount`来控制背景变暗,突出对话框。在DialogFragment的`onCreateDialog`或`onViewCreated`中,获取`Dialog`的`Window`,设置`LayoutParams.dimAmount`(例如0.5f)并添加`FLAG_DIM_BEHIND`标志。要动态调整,可保存`LayoutParams`并在需要时更新。对于Dialog,创建时直接设置同样属性。还可以通过定义主题样式设置背景模糊程度。
581 7
|
机器学习/深度学习 存储 计算机视觉
基于YOLOv8深度学习的脑肿瘤智能检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测、智慧医疗(2)
基于YOLOv8深度学习的脑肿瘤智能检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测、智慧医疗