如何将 OPC-UA 数据与 Kafka 连接?
Posted
技术标签:
【中文标题】如何将 OPC-UA 数据与 Kafka 连接?【英文标题】:How to Connect OPC-UA data with Kafka? 【发布时间】:2020-10-02 01:21:02 【问题描述】:我想将 opc-ua 数据映射到 kafka 主题中。例如,汇合没有特定的连接器。
我将使用 eclipse/milo (https://github.com/eclipse/milo)。
【问题讨论】:
【参考方案1】:OPC 是您的服务器,通过 OPC 的节点,您就拥有了数据。当您拥有数据时,您可以选择对数据进行任何处理。您可以编写处理程序类或服务来处理从 OPC 服务器获取的数据。您必须使用您最喜欢的方法之一编写一个基本类,以将获取的数据放入 Kafka 或 Redis 或其他任何东西中。基本上您需要 kafka 的 java 客户端并将其与 Milo OPC 一起包含在您的项目中,使用 Milo @ 读取数据987654321@,用Kafka的java客户端放到Kafka上。
【讨论】:
【参考方案2】:我曾经处理过这个问题。那是一项 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 连接的可用性。我将在下面解释解决方案。并且您正在创建额外的组件,您需要为此目的进行管理,这在我们的案例中并不真正需要。
我的解决方案很简单。我使用 Kafka 客户端 API。它在安装了 OPC 服务器的机器上作为代理工作。所以这确实简化了问题。
我决定那个代理应该在进程中工作。因为,我的目的是尽可能快地向 Kafka 发送数据,我需要一个运行速度快且需要轻量级的解决方案。
进程间通信会产生开销,我们的代理将在安装了 OPC 服务器的同一台机器上工作。 OPC 消息很小,程序很轻,我不想为此目的产生开销,并决定使用进程内。 因此,为了能够首先实现这一目标,我寻找了 OPC 客户端 API。
我看到有一个由 OPC UA Foundation 提供并用 C# 编写的官方客户端 API。你可以找到它here。而且我也知道 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 机器。
【讨论】:
【参考方案3】:您可以使用https://github.com/vogler75/automation-gateway/ 做到这一点。它连接到 1-n 个 OPC UA 服务器,您可以通过 GraphQL 或 MQTT 访问 OPC UA 标签,您可以添加一个记录器来将 OPC UA 值记录到 Apache Kafka。
【讨论】:
【参考方案4】:截至今天,Kafka 有 2 个 OPC UA 连接器:https://www.confluent.de/hub/#OPC
【讨论】:
【参考方案5】:您可以使用带有 Kafka Plug-In 的 OPC 路由器将 OPC UA or OPC Classic 数据流式传输到 Kafka。
OPC 路由器被列为official solution in the confluent hub
【讨论】:
以上是关于如何将 OPC-UA 数据与 Kafka 连接?的主要内容,如果未能解决你的问题,请参考以下文章
Kafka核心技术与实战——13 | Java生产者是如何管理TCP连接的?
Kafka核心技术与实战——13 | Java生产者是如何管理TCP连接的?