在物联网世界中,MQTT(消息队列遥测传输协议)和OPC-UA(OPC统一架构)已经成为了在工业物联网(IIoT)和工业4.0用例中,数据交换的开放协议和平台独立标准。而Apache Kafka的数据流用于实时集成和处理任何规模的、海量数据的数据中心。本文将探讨Kafka和各种IoT协议之间的关系,何时该使用哪种技术,以及为何有时HTTP/REST是更好的选择。最后,我们将探讨两个来自宝马和奥迪的使用案例。
1.工业4.0数据流平台通过连接设备来提高工厂的整体效率
工业4.0和工业物联网(IIoT)需要通过系统近乎实时地传输、处理、分析和提供数据。这会导致数据量的逐日攀升,并让制造商面临数据多样化的挑战。然而,使问题进一步复杂化的是,传统的IT环境持续存在于各种制造设施中。这往往限制了制造商实现跨业务进行数据有效集成的能力。因此,大多数制造商都需要将数据复制和同步策略予以混合实施。目前,他们也正在从产品设计和制造到运维环节,努力提高其生产设施的整体设备效率(OEE)。与此同时,由于新冠疫情的流行和2021年苏伊士运河的中断,都会导致即时生产与供应链问题的凸显。因此企业需要通过实时的流程和监控,在如下方面确保生产线的自适应能力:
准时(JIT)的预测
构建工厂的产能
人员配备与倒班状况
原材料和产品价格的波动
通常,由设备产生的数据必须在生成之后立即被转换,并在整个企业中可用,来体现数据被提取的最大价值,提高工厂的整体效率,进而避免严重故障。如今,宝马和特斯拉之类的汽车制造商已经认识到了数据流平台的潜力,正在利用Apache Kafka生态系统来流转数据。可以说,数据流对于数据驱型制造公司的好处,不仅体现在数字化和自动化转型上,还包括如下方面:
使生产过程更加高效
多快好省
尽量减少错误率
2.何时使用Kafka、MQTT和OPC-UA
如前文所述,Kafka是一个出色的数据流平台,可被用于大规模的实时消息传递、存储、数据集成和处理。不过,Kafka并非包治百病,它未能实现如下方面:
数百万客户级别(如移动应用)的代理
API管理平台
用于复杂查询和批量分析的数据库
具有设备管理等功能的物联网平台
一种用于硬实时应用的技术
鉴于上述原因,Kafka需要通过与MQTT和OPC-UA的协同使用,来补齐短板。以近乎实时的方式,在工厂、公司、以及在全球范围内,实现大量数据的处理和交换。
全球Apache Kafka和事件流用例
如上图所示,Apache Kafka通常作为分散式数据流的数据网格节点,能够集成各种系统,其中包括:边缘、物联网设备、以及业务软件,并能够独立于底层基础设施(如:边缘、本地、公共、多云和混合云等)来执行。因此,开放、可扩展、以及灵活的架构对于与旧环境的集成,和利用现代化云原生应用都是至关重要的。由事件驱动的Apache Kafka等数据流平台正好满足了此类需求。它们收集相关传感器的遥测数据、以及来自IT系统的数据,并在数据传输时,对其进行处理。这便是“动态数据”的概念。它区别于将事件存储到数据库中,以待日后查看的“静态数据”。在物联网用例中,我们通常认为处理静态数据的是一种“过时的架构”。
3.使用域驱动设计和真正的解耦来进行分离
其实,工厂的IT环境被建立在什么样的基础设施上并不重要。重要的是,新旧系统能够实现数据的实时集成,能够以解耦的方式维持数据的持续流动和消息存储。而与其他消息系统(如IT领域的RabbitMQ、或物联网领域中的MQTT)相比,Apache Kafka的域驱动设计(DDD)实现了背压处理和数据可重放性的真正解耦,同时提升了高可用性和故障安全(fail-safe)性,这些都是生产环境中至关重要的。
用于工业物联网MQTT和OPC UA的Kafka域驱动设计
4.OPC-UA、MQTT、HTTP与其他
目前,开放且标准化的物联网架构有三个通用的标准:OPC-UA(Open Platform Communications Unified Architecture,开放平台通信统一架构)和MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),这两个是特定于物联网的协议,另一个是简单的REST/HTTP。当然,业界也有一些私有的特定协议。例如:Skynet的专有DataHub传输协议(DHTP,https://skkynet.com/iiot-protocol-comparison),以及开放标准的替代方案--AMQP等。下表展示了它们在特性上的比较:
工业物联网协议的比较
5.评估物联网协议的决策树
那么,哪一种更值得我们去选用呢?首先,需要强调的是,此类讨论只有在您拥有选择权的情况下才有意义。如果您在车间购买并安装了一台新机器或PLC,而仅提供特定接口,那么您只有用的份,没有选择可言。当然,不同领域的人员可能会有不同的选择偏好。甚至有人会从TCO和ROI的角度,认为专有方案会是更好的选择。而总地说来,对于不同的物联网协议,我的建议是:尽可能地使用开放标准,甚至可以按需将它们组合到一起。下面,让我们来看一个简单的、如何在OPC-UA、MQTT、HTTP和其他专有的工业物联网协议之间,做出选择的“决策树”:
MQTT、OPC UA、HTTP REST的工业物联网决策树
让我们来讨论一下上面的决策树:
HTTP/REST非常适合简单的用例(尽可能地保持简单)。HTTP的易懂易用特性,几乎适用于任何场景。它不需要额外的工具、API或中间件,而且其通信是同步式的“请求-响应”。如果您能够采用HTTP(S)的80或443端口,而不是其他TCP端口的话,还能顺利地得到安全团队的协助。当然,HTTP属于单向通信。例如,联网的汽车需要一个HTTP服务器,来获取从云端推送的数据,它们会使用pub/sub。
MQTT非常适合于连接着数万或数十万台设备,使用有限的带宽和间断性网络的场景(如,联网汽车的基础设施)。其通信是使用MQTT代理作为中间人的异步发布与订阅。MQTT不使用标准的数据格式,但是开发人员可以使用Sparkplug作为构建附加的组件。MQTT非常轻量级,其服务质量(QoS)、遗嘱式功能,开箱即用地解决了物联网用例的各种要求。同时MQTT非常适合双向通信(如,联网汽车<-->云通信)等IT用例。此外,LoRaWAN和其他低功耗的广域网都非常适合MQTT。
OPC-UA非常适合工业自动化(如,生产线上的机器)。今天的通信通常是客户端/服务器,但也支持发布/订阅。它使用标准数据格式,并提供丰富、强大、复杂的功能、组件、以及行业特定数据格式集。OPC-UA非常适合OT与IT相集成的场景。OPC UA的TSN(time-sensitive networking,时间敏感网络)是一个可选组件。它是一种以太网通信标准,可以提供开放、确定性、以及硬实时(hard real-time)通信。
专有协议适用于那些基于标准化的实现无法解决的特定问题。这些协议通常是瑕瑜互见。它们在带来强大的高性能的同时,往往也比较昂贵且带有局限性。
如前文所述,我们在OPC-UA、MQTT和其他协议之间进行选择时,并不是非此即彼的。在许多工业案例中,我们可以将OPC-UA和MQTT同时用于现代化应用中,取长补短,让每种协议都发挥其出色的作用,从而让老旧的应用和专有的SCADA系统、或其他历史遗留数据与专有中间件相集成。
6.MQTT、OPC-UA和Kafka之间的集成
在将MQTT、OPC-UA和Kafka的集成过程中,我们通常会涉及到如下设备与组件:
Kafka Connect连接器:可以实现协议级别的原生Kafka集成。Confluent Hub(https://www.confluent.io/hub/)可以作为它的替代方案。一些企业往往会构建他们自定义的Kafka Connect连接器。
自定义集成:通过低级别的MQTT/OPC-UA API(如,使用Kafka的HTTP/REST代理)或Kafka客户端(如,用于Windows环境的.NET/C++)进行集成。
开放的第三方物联网中间件:通用的开源式集成中间件(如,带有IoT连接器的Apache Camel)、特定于IoT的框架(如Apache PLC4X或Eclipse Ditto),或基于标准API的专有第三方IoT中间件。
商业化物联网平台:适合现有的历史遗留部署,并能够起到“胶合”代码与协议作用(如Modbus、西门子S7等)。传统的历史数据、专有协议、单体架构、有限的可扩展性、ETL批处理平台都非常适合采用商业化物联网平台,在内部部署和云服务之间架起一座桥梁。
7.使用OPC-UA或MQTT去连接机器与设备
虽然OPC UA和MQTT并非为数据处理和集成而设计,但是它们的优势在于实时建立与设备、机器、PLC、物联网网关或车辆之间的双向“最后一英里”通信。如上文所述,这两种标准有着不同的侧重点,可以被结合起来使用。目前,几乎所有的现代化机器、PLC和智能工厂的物联网网关都可以支持OPC-UA。而MQTT主要被用于较差的网络、以及大规模的设备场景中。数据流往往通过连接器流入数据流平台。此类平台既可以与“边缘”的物联网平台并行部署,也可以被组合到混合云的场景中。作为灵活的数据中心,数据流平台可以在OT和IT应用之间进行数据的集成和处理。除了OT端的OPC-UA和MQTT,无论是在边缘、本地、还是在云端,MES、ERP、CRM、数据仓库、以及数据湖等IT应用都是实时连接的。
Apache Kafka作为具有MQTT和OPC UA的开放式可扩展历史数据库(https://www.kai-waehner.de/blog/2020/04/21/apache-kafka-as-data-historian-an-iiot-industry-4-0-real-time-data-lake/)
8.用于开发和预测仿真的数字孪生
通过持续地以流式传输数据,以及处理和集成传感器的数据,数据流平台能够创建一个开放、可扩展且高度可用的基础架构,并用于部署数字孪生。
数字孪生结合了物联网、人工智能、机器学习和其他技术,旨在创建物理组件、设备和流程等虚拟模拟。通过参考历史数据,数字孪生也可以在物理对应物所生成的数据发生变化时,立即进行自我更新。通常,Kafka可与其他技术相结合,以构建数字孪生。例如,Eclipse Ditto是一个将Kafka与IoT协议相结合的项目。一些团队也会使用Kafka和MongoDB等数据库,定制数字孪生。
Apache Kafka助力工业 4.0和工业物联网的数字孪生
如上图所示,在工业4.0中,机器操作员可以通过数字孪生,详细了解其模拟或监控的元素的生命周期,不断优化产品和流程,测试单个部件或整个系统的功能和性能,进而对能耗和磨损进行预测。
9.状态监测和预测性维护
在现代化维护中,机器操作员往往需要及时了解到:所有设备是否能按照预期运行?在需要进行维护工作之前,这些设备通常可以运行多长时间?异常和错误的原因是什么?
一方面,他们需要依赖可靠且可扩展的基础架构,以支持数据流的处理、分析和集成,进而实时地检测出诸如:严重的温度波动或振动等关键性指标,以便采取措施,保障工厂的生产效率。另一方面,数字孪生可以通过监测和诊断,将当前传感器捕捉到的数据与历史数据相关联,从而识别故障的原因,方便采取预测性的维护措施。而最重要的是,通过确保设备和设施仅在必要时得到维修,他们可以更加有效地实施预测性维护计划,既做到为制造型企业节省宝贵的资源,又可以避免代价高昂的停机时间。
使用Apache Kafka的ksqlDB和TensorFlow进行状态监控和预测性维护(https://www.kai-waehner.de/blog/2021/10/25/apache-kafka-condition-monitoring-predictive-maintenance-industrial-iot-digital-twin/)
10.联网汽车和流式机器学习
联网汽车是可以与车外其他系统进行双向通信的汽车。它实现了汽车与车内、车外的各种设备和应用共享互联网上的访问和数据。而前面提到的MQTT与Kafka相结合的方式,便可以服务于联网汽车及其基础设施的用例。
下图展示了Kafka如何与数万、甚至数十万个物联网设备相集成,并实时地处理数据。在联网汽车的基础设施中,该流程可以自动化地进行预测性防护(即异常检测),以及预测发动机的故障:
Kappa架构、Kafka MQTT的Kubernetes和Tensorflow用于流式机器学习
11.宝马案例研究使用智能工厂和云服务实现制造4.0
让我们从技术角度来探讨一下,宝马是如何成功地将Kafka和OPC-UA作为边缘设备和云端应用之间的实时数据中心。在实施之前,宝马希望达到的目标是:
在不影响其他服务的情况下,获取IoT数据,并将其传输到正确的位置
一次收集,多次处理和消费(不同的消费端在不同的时段,使用不同的通信范式,如:实时、批处理、请求-响应)
实现可扩展性的实时处理,并缩短上市的时间
宝马团队通过使用OPC-UA连接器,直接与Azure中的Confluent Cloud进行通信,成功地将其全球智能工厂的负载相连接,并在公共云中实现了实时复制。其中,作为消息传递平台的Kafka提供了不同接口之间的真正解耦、透明化和数字创新。而Confluent通过产品和专业知识,增加了制造系统的稳定性。此外,实时优化的供应链管理方案也提供了有关物理上、以及ERP系统中的正确库存信息。
12.奥迪案例研究
采用群体智能(Swarm Intelligence)的联网汽车
奥迪使用Apache Kafka构建了联网汽车的基础设施。他们在Kafka峰会上分享并探讨了其用例和架构。
他们构建了实时数据分析、群体智能、合作伙伴协作、以及预测性AI,实现了联网汽车的所有传感器数据,经过实时处理与存储,用于历史分析和实时报告的一整套流程。
13.题外话
如果网络基础设施的连接性允许您在自己IoT项目中使用“无服务器Kafka”的话,那么您也可以像上述宝马的案例那样,利用Confluent Cloud在全球推广智能工厂,用“无服务器Kafka”来处理和集成数据流。通过无服务器数据流,您可以更加专注于物联网业务的应用,并提高设备综合效率(OEE)。