我想将opc-ua数据映射到kafka主题中。例如,没有来自confluent的spefic连接器。
我将使用eclipse/milo (https://github.com/eclipse/milo)。
发布于 2020-06-20 15:53:18
OPC是你的服务器,有了OPC的节点,你就有了你的data.When,你可以选择用data.You做任何事情,你可以编写一个处理程序类或服务来处理你从OPC获取的数据,server.You必须编写一个基本的类,用你喜欢的方法将数据放入Kafka或Redis或任何你需要的else.Basically中,并将其与Milo OPC一起包含在你的项目中,使用Milo node.readValue().get()读取数据,并使用Kafka的java客户端将其放在Kafka上。
发布于 2021-03-17 00:45:28
我曾经解决过这个问题。那是POC的工作。以下是我对此的看法。
Kafka有两个API用于与外部系统通信,分别是Kafka Client API和Kafka Connector。Kafka API简单而强大的API,但您需要实现解决方案,以便能够提供容错,并在需要时将工作分配给工人。Kafka Connect功能强大,旨在支持解决此问题的解决方案,能够让开发人员更容易点赞。
OPC服务器不能作为一个集群工作。它的工作方式类似于冗余对。您不能在OPC服务器产品中分配负载。
那么,我们真的需要一个Kafka connect集群来将数据从OPC发送到kafka吗?因为kafka connect被设计为作为微服务工作,以便能够分配负载,而它作为集群工作。但是,OPC服务器只在一台机器上工作,如果数据适合在一台机器上,那么您不需要创建单独的集群来发送数据。
你可以说
您正在创建额外的组件,您需要为此目的管理这些组件,而在我们的示例中,这些组件实际上并不是必需的。
我的解决方案很简单。我使用Kafka客户端API。它在安装了OPC服务器的机器上作为代理工作。所以这真的简化了问题。
我决定代理应该在进程中工作。因为,我的目的是尽可能快地将数据发送到Kafka,我需要一个快速工作的解决方案,并且需要轻量级。
进程间的通信产生了开销,我们的代理将在安装了OPC服务器的同一台机器上工作。OPC消息很小,程序很轻量级,我不想为此创建开销,决定使用进程内。因此,为了能够首先实现这一点,我寻找了OPC客户端API。
我看到有一个由OPC UA Foundation提供的用C#编写的官方客户端API。你可以在here上找到它。我也知道Java API是Kafka客户端中功能最强大的API。因此,我寻找另一个用Java编写的OPC客户端API (正如我所说的,这是因为我想在进程中使用该解决方案)。然后我发现了月食麦洛。但它在早期并未在生产环境中进行测试,因此我决定使用用C#编写的官方标准应用程序接口。
因此,我使用OPC标准库和Kafka C#客户端库。集成非常简单,但你需要考虑一些问题,比如你的程序可能会崩溃,如果你不能容忍数据丢失,你需要实现一个解决方案来将数据持久存储在像LiteDB这样的嵌入式数据库中(因为它已经用c#编写,并且可以在我们的程序中运行)。
在这个解决方案中,为了能够实现HA和消除SPOF,您可以放置一个安装在3台机器上的3 OPC服务器,并在这些机器上安装此代理软件,然后您就可以使用高可用性和容错解决方案投入生产。
PS:我们将与KepServerEX合作-我们决定支持他们,并有很多驱动程序支持-它只能在windows机器上运行。
发布于 2021-05-02 05:34:23
你可以用https://github.com/vogler75/automation-gateway/做到这一点。它连接到1-n OPC服务器,您可以通过GraphQL或MQTT访问OPC标签,还可以添加记录器将OPCUA值记录到Apache Kafka中。
https://stackoverflow.com/questions/62340638
复制相似问题