如何将OPC-UA数据与Kafka连接起来?



我想将opc-ua数据映射到kafka主题中。

OPC是你的服务器,有了OPC的节点,你就有了你的数据。当您拥有数据时,您可以选择对数据执行任何操作。您可以编写处理程序类或服务来处理从 OPC 服务器获取的数据。你必须用你最喜欢的方法之一编写一个基本类,将获取的数据放入Kafka或Redis或其他任何东西中。基本上,你需要 kafka 的 java 客户端,并将其与 Milo OPC 一起包含在您的项目中,使用 Milonode.readValue().get()读取数据,并使用 Kafka 的 java 客户端将其放在 Kafka 上。

我曾经处理过这个问题。那是 POC 的工作。 这是我对此的看法。

Kafka有两个API来通信外部系统,分别是Kafka Client API和Kafka Connector。Kafka API 简单而强大的 API,但您需要实现解决方案,以便能够提供容错能力,并在需要时将工作分配给工作人员。Kafka Connect功能强大,旨在支持解决此问题的解决方案,以便能够使开发人员更容易喜欢。

OPC 服务器不作为群集工作。它的工作方式类似于冗余对。不能在 OPC 服务器产品中分配负载。

那么,我们真的需要一个kafka连接集群来将数据从OPC发送到Kafka吗? 因为 kafka connect 旨在用作微服务,以便能够分配负载,并且它作为集群工作。但是,OPC服务器仅在一台计算机上工作,如果数据适合一台计算机,则无需创建单独的集群来发送数据。

  • 你可以说,但它是一个HA(高可用性(解决方案。然后我说你的OPC服务器上有SPOF(单点故障(。因此,如果您解决了这个问题,则无需担心kafka connect的可用性。我将在下面解释解决方案。

您正在创建额外的组件,您需要为此目的进行管理,这在我们的例子中并不是真正必要的。

我的解决方案很简单。我使用 Kafka 客户端 API。它在 OPC 服务器安装的计算机上用作代理。所以这真的简化了问题。

我决定代理应该在过程中工作。因为,我的目的是尽快将数据发送到 Kafka,我需要一种快速运行且需要轻量级的解决方案。

进程间通信会产生开销,我们的代理将在安装了 OPC 服务器的同一台机器上工作。OPC消息很小,程序很轻,我不想为此目的产生开销,并决定使用进程内。 因此,为了能够首先实现这一目标,我寻找了OPC客户端API。

我看到有一个由OPC UA基金会提供的官方客户端API,并用C#编写。你可以在这里找到它。我也知道Java API是Kafka Client中最强大的API。因此,我寻找另一个用Java编写的OPC客户端API(正如我所说,这是因为我想在进程中使用该解决方案(。然后我找到了Eclipse Milo。但是它没有在早期的生产环境中进行测试,我决定使用用 C# 编写的官方标准 API。

因此,我使用 OPC UA 标准库和 Kafka C# 客户端库。集成非常简单,但您需要考虑一些问题,例如您的程序可能会崩溃某些原因,如果您不能容忍数据丢失,则需要实现一个解决方案来将数据持久化在嵌入式数据库中,如 LiteDB(因为它已经用 c# 编写并与我们的程序一起处理(。

在此解决方案中,为了实现HA并消除SPOF,您可以将安装在3台计算机上的3 OPC服务器放置在这些计算机上,并在这些计算机上安装此代理软件,然后您就可以使用高可用性和容错解决方案进行生产。

PS:我们将与KepServerEX合作 - 我们决定支持他们并有很多驱动程序支持 - 它仅适用于Windows机器。

你可以用 https://github.com/vogler75/automation-gateway/做到这一点。它连接到 1-n OPC UA 服务器,您可以通过 GraphQL 或 MQTT 访问 OPC UA 标签,还可以添加一个记录器将 OPC UA 值记录到 Apache Kafka 中。

您可以将 OPC 路由器与 Kafka 插件结合使用,将 OPC UA 或 OPC Classic 数据流式传输到 Kafka。

OPC路由器在融合集线器中被列为官方解决方案

相关内容

  • 没有找到相关文章

最新更新