C++ SDK

新建实时同步任务

在 Dashboard 或者通过命令行工具创建任务,数据源类型使用 Auto Push (自主推送)。

引入 C++ SDK

需要在项目中包含SDK的头文件和库,进行 SDK 的使用。头文件和库提供可以从源码自行编译,见 SDK 编译使用

数据上报流程

引入 SDK 后,可以通过调用 SDK 的send相关接口进行单条(批量)数据的上报,发送 demo 可参考 send_demo.cc 。整体流程包括以下三个步骤:

创建 SDK实例

SDK 支持进程创建1个SDK实例,多线程安全,也支持进程创建多个SDK实例,各个SDK实例相互独立,各个SDK实例也线程安全:

  • 创建SDK实例对象
  1. InLongApi inlong_api
  1. // 初始化SDK,参数为配置文件的路径名;返回值为零表示初始化成功
  2. int32_t result = inlong_api.InitApi("/home/conf/config.json");

调用发送接口进行数据上报

SDK 支持单条(推荐)和批量发送,二者发送过程均为异步模式,数据上报接口是线程安全的。在进行数据上报前,可设置回调函数在数据发送失败时进行回调处理,回调函数签名如下:

  1. int32_t CallBackFunc(const char* inlong_group_id, const char* inlong_stream_id,
  2. const char* msg, int32_t msg_len,
  3. const int64_t report_time,
  4. const char* client_ip);
  • 单条数据数据上报接口
  1. // 返回值:零表示发送成功,非零表示失败,具体异常返回值详见tc_api.h中的SDKInvalidReuslt
  2. int32_t Send(const char *inlong_group_id, const char *inlong_stream_id,
  3. const char *msg, int32_t msg_len,
  4. UserCallBack call_back = nullptr)

关闭 SDK

调用 close 接口关闭 SDK:

  1. // 返回值为零表示关闭成功,后续无法再进行数据上报
  2. // max_waitms:关闭SDK前的等待最大毫秒数,等待SDK内部数据发送完成
  3. int32_t CloseApi(int32_t max_waitms);

注意事项

  • 建议采用将 SDK 作为常驻服务来进行数据上报,避免同个进程中途频繁地初始化和关闭,重复初始化和关闭会带来更多开销;
  • SDK 发送是异步进行的,返回值为 0 表示数据成功存入了 SDK 内部缓冲区,等待网络发送。如果inlong_group_id 本身配置有误或者网络异常,也会导致数据发送失败,所以建议用户在调用该接口时设置回调,数据多次重试发送仍失败时执行回调。

附录:配置文件说明

配置文件格式和重要参数如下:

  1. {
  2. "init-param": {
  3. "inlong_group_ids": "b_inlong_group_test_01, b_inlong_group_test_02",
  4. "manager_url": "http://127.0.0.1:8099/inlong/manager/openapi/dataproxy/getIpList",
  5. "manager_update_interval": 2,
  6. "manager_url_timeout": 5,
  7. "msg_type": 7,
  8. "max_proxy_num": 8,
  9. "per_groupid_thread_nums": 1,
  10. "dispatch_interval_zip": 8,
  11. "dispatch_interval_send": 10,
  12. "recv_buf_size": 10240000,
  13. "send_buf_size": 10240000,
  14. "enable_pack": true,
  15. "pack_size": 409600,
  16. "pack_timeout": 3000,
  17. "ext_pack_size": 409600,
  18. "enable_zip": true,
  19. "min_zip_len": 512,
  20. "tcp_detection_interval": 60000,
  21. "tcp_idle_time": 600000,
  22. "log_num": 10,
  23. "log_size": 104857600,
  24. "log_level": 3,
  25. "log_path": "./",
  26. "need_auth": false,
  27. "auth_id": "****",
  28. "auth_key": "****"
  29. }
  30. }
参数含义默认值
inlong_group_idsinlong_group_id列表b_inlong_group_test_01, b_inlong_group_test_02
manager_urlmanager地址http://127.0.0.1:8099/inlong/manager/openapi/dataproxy/getIpList
manager_update_interval请求manager间隔时间2 分钟
manager_url_timeout推送的数据时间毫秒为单位的时间戳
msg_type数据类型7
max_proxy_num单实例最大proxy数据8
per_groupid_thread_nums单inlong_group_id线程数1
dispatch_interval_zip压缩数据间隔周期8 ms
dispatch_interval_send数据分发间隔10 ms
recv_buf_size接收缓冲区大小10240000 字节
send_buf_size发送缓冲区大小10240000 字节
enable_pack是否允许打包true
pack_size打包大小409600 字节
pack_timeout打包间隔3000 ms
ext_pack_size单条消息最大大小409600 字节
enable_zip是否允许压缩true
min_zip_len最小压缩大小512 字节
tcp_detection_intervaltcp 探测周期60000 ms
tcp_idle_timetcp 死亡周期600000 ms
log_num日志文件个数10
log_size单个日志文件大小104857600 字节
log_level日志级别3。 日志级别,trace(4)>debug(3)>info(2)>warn(1)>error(0)
log_path日志目录./
need_auth是否开启认证false
auth_id账号
auth_key密钥