超轻量物联网边缘流处理 - Kuiper 插件开发教程

EMQ X Kuiper 是一款基于 SQL 的轻量级物联网流式数据处理软件,提供了一套插件机制用于实现自定义源(source),目标(sink)以及 SQL 函数(function)以扩展流处理功能。本教程详细介绍了 Kuiper 插件的开发编译和部署过程。

概览

Kuiper 插件基于 Go 语言的插件机制,用户可以构建松散耦合的插件程序,在运行时动态加载和绑定。但是,由于 GO 语言插件系统的限制, Kuiper 插件的编译和使用也有相应的限制:

  • 插件不支持 windows 系统
  • 插件编译环境要求跟 Kuiper 编译环境尽量一致,包括但不限于
    • 相同的 GO 版本
    • 插件与 Kuiper 自身依赖的相同包版本必须完全一致,包括 Kuiper 自身
    • 插件与 Kuiper 编译环境的 GOPATH 必须完全一致

这些限制较为苛刻,几乎要求插件和 Kuiper 在同一台机器编译运行,经常导致开发环境编译出的插件无法在生产 Kuiper 上使用。本文详细介绍了一种切实可用的插件开发环境设置和流程,推荐给 Kuiper 插件开发者使用。插件的开发和使用一般有如下流程:

  • 开发
    • 创建并开发插件项目
    • 编译调试插件
  • 部署
    • 编译生产环境可用插件
    • 部署插件到生产环境

插件开发

插件开发一般在开发环境中进行。在开发环境调试运行通过后再部署到生产环境中。

创建并开发插件项目

Kuiper 项目源代码的 plugins 目录下有一些插件范例。用户自定义的插件也可以在 Kuiper 项目中开发。但是为了便于代码管理,一般应当在 Kuiper 项目之外另建项目开发自定义插件。插件项目建议使用 Go module,典型的项目目录如下图所示:

plugin_project
  sources         //源(source)插件源代码目录
    mysource.go
  sinks           //目标(sink)插件源代码目录
    mysink.go
  functions       //函数(function)插件源代码目录
    myfunction.go
  target          //编译结果目录     
  go.mod          //go module文件

插件开发需要扩展 Kuiper 内的接口,因此必须依赖于 Kuiper 项目。最简单的 go.mod 也需要包含对 Kuiper 的依赖。典型的 go.mod 如下:

module samplePlugin

go 1.13

require (
	github.com/emqx/kuiper v0.0.0-20200323140757-60d00241372b
)

Kuiper 插件有三种类型,源代码可放入对应的目录中。插件开发的详细方法请参看 EMQ X Kuiper 扩展。本文以目标(sink)为例,介绍插件的开发部署过程。我们将开发一个最基本的 MySql 目标,用于将流输出写入到 MySql 数据库中。

  • 新建名为 samplePlugin 的插件项目,采用上文的目录结构
  • 在 sinks 目录下,新建 mysql.go 文件
  • 编辑 mysql.go 文件以实现插件
    • 实现 api.Sink接口
    • 导出 Symbol:Mysql
  • 编辑 go.mod, 添加 mysql 驱动模块

mysql.go 完整代码如下

package main

import (
	"database/sql"
	"fmt"
	"github.com/emqx/kuiper/xstream/api"
	_ "github.com/go-sql-driver/mysql"
)

type mysqlSink struct {
   
   
	url       string
	table     string

	db        *sql.DB
}

func (m *mysqlSink) Configure(props map[string]interface
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值