This is an automated email from the ASF dual-hosted git repository. zirui pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/inlong-website.git
The following commit(s) were added to refs/heads/master by this push: new 521909ddf5 [INLONG-886][Doc] Update DataProxy Golang SDK docs (#887) 521909ddf5 is described below commit 521909ddf50ee136f6a9dc2b6d8003224cb5f08e Author: gunli <24350...@qq.com> AuthorDate: Wed Nov 1 09:53:34 2023 +0800 [INLONG-886][Doc] Update DataProxy Golang SDK docs (#887) --- docs/sdk/dataproxy-sdk/go.md | 48 +++--- .../current/sdk/dataproxy-sdk/go.md | 169 +++++++++++++++++++++ 2 files changed, 193 insertions(+), 24 deletions(-) diff --git a/docs/sdk/dataproxy-sdk/go.md b/docs/sdk/dataproxy-sdk/go.md index f984109f90..bfeebc45c6 100755 --- a/docs/sdk/dataproxy-sdk/go.md +++ b/docs/sdk/dataproxy-sdk/go.md @@ -123,31 +123,31 @@ Some common errors: | Option | Default value | Desc | Optional | | --------------------------- | ---------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| WithGroupID() | "" | Sets the Group ID. | No | -| WithURL() | "" | Sets the Manager URL. | No | -| WithUpdateInterval() | 5m | Sets the update interval of service discoery. | Yes | -| WithConnTimeout() | 3000ms | Sets the connection timeout. | Yes | -| WriteBufferSize | 16M | Sets the write buffer size. | Yes | -| WithReadBufferSize | 16M | Sets the read buffer size. | Yes | -| WithSocketSendBufferSize | 16M | Sets the socket send buffer size. | Yes | -| WithSocketRecvBufferSize | 16M | Sets the socket receive buffer size. | Yes | -| WithBufferPool | nil | Sets the buffer pool to use. | Yes, if the application has one, use the same one is recommended. | -| WithBytePool | nil | Sets the byte pool to use. | Yes, if the application has one, use the same one is recommended. | -| WithBufferPoolSize | 409600 | Sets the buffer pool size. | Yes | -| WithBytePoolSize | 409600 | Sets the byte pool size. | Yes | -| WithBytePoolWidth | equals to BatchingMaxSize | Sets the byte pool width. | Yes | -| WithLogger | std.out | Sets the debug logger. | Yes, but the default one is not recommended, as it has no log levels control. | +| WithGroupID() | "" | Sets the Group ID. | No | +| WithURL() | "" | Sets the Manager URL. | No | +| WithUpdateInterval() | 5m | Sets the update interval of service discoery. | Yes | +| WithConnTimeout() | 3000ms | Sets the connection timeout. | Yes | +| WriteBufferSize | 8M | Sets the write buffer size. | Yes | +| WithReadBufferSize | 1M | Sets the read buffer size. | Yes | +| WithSocketSendBufferSize | 8M | Sets the socket send buffer size. | Yes | +| WithSocketRecvBufferSize | 1M | Sets the socket receive buffer size. | Yes | +| WithBufferPool | nil | Sets the buffer pool to use. | Yes, if the application has one, use the same one is recommended. | +| WithBytePool | nil | Sets the byte pool to use. | Yes, if the application has one, use the same one is recommended. | +| WithBufferPoolSize | 409600 | Sets the buffer pool size. | Yes | +| WithBytePoolSize | 409600 | Sets the byte pool size. | Yes | +| WithBytePoolWidth | equals to BatchingMaxSize | Sets the byte pool width. | Yes | +| WithLogger | std.out | Sets the debug logger. | Yes, but the default one is not recommended, as it has no log levels control. | | WithMetricsName | "dataproxy-go" | Sets the metrics name of this client. | Yes, if there are more than one client instance in one application, the metrics names must be different. | -| WithMetricsRegistry | prometheus.DefaultRegisterer | Sets the metrics registry. | Yes | -| WithWorkerNum | 8 | Sets the worker number. | Yes | -| WithSendTimeout | 30000ms | Sets the send timeout. | Yes | -| WithMaxRetries | 2 | Sets the max retry count. | Yes | -| WithBatchingMaxPublishDelay | 10ms | Sets how long a message to wait for batching. | Yes | -| WithBatchingMaxMessages | 10 | Sets the message number of a batch. | Yes | -| WithBatchingMaxSize | 4K | Sets the batch size in Bytes of a batch. | Yes | -| WithMaxPendingMessages | 409600 | Sets the queue length of each worker. | Yes | -| WithBlockIfQueueIsFull | false | Sets if block if the queue is full. | Yes | -| WithAddColumns | nil | Sets the added columns to all the messages, DataProxy supports add addtional columns at specific positions to all messages,for example:\_\_addcol1\_\_worldid=xxx will add a column named 'worldid' at position 1 and its value is 'xxx'. | Yes | +| WithMetricsRegistry | prometheus.DefaultRegisterer | Sets the metrics registry. | Yes | +| WithWorkerNum | 8 | Sets the worker number. | Yes | +| WithSendTimeout | 30000ms | Sets the send timeout. | Yes | +| WithMaxRetries | 2 | Sets the max retry count. | Yes | +| WithBatchingMaxPublishDelay | 20ms | Sets how long a message to wait for batching. | Yes | +| WithBatchingMaxMessages | 50 | Sets the message number of a batch. | Yes | +| WithBatchingMaxSize | 40K | Sets the batch size in Bytes of a batch. | Yes | +| WithMaxPendingMessages | 204800 | Sets the queue length of each worker. | Yes | +| WithBlockIfQueueIsFull | false | Sets if block if the queue is full. | Yes | +| WithAddColumns | nil | Sets the added columns to all the messages, DataProxy supports add addtional columns at specific positions to all messages,for example:\_\_addcol1\_\_worldid=xxx will add a column named 'worldid' at position 1 and its value is 'xxx'. | Yes | options refers to [options.go](https://github.com/apache/inlong/tree/master/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/dataproxy/opitons.go) diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/sdk/dataproxy-sdk/go.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/sdk/dataproxy-sdk/go.md new file mode 100755 index 0000000000..5423db8965 --- /dev/null +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/sdk/dataproxy-sdk/go.md @@ -0,0 +1,169 @@ +--- +title: Golang SDK +sidebar_position: 4 +--- + +## 新建实时同步任务 +在 Dashboard 或者通过命令行工具创建任务,数据源类型使用 `Auto Push` (自主推送)。 + +## 引入 Golang SDK +需要在项目中导入 SDK 的包,进行 SDK 的使用。导入方式如下: + +```go +import "github.com/apache/inlong/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/dataproxy" +``` + + +## 数据上报流程 +导入 SDK 后,通过实例化一个 [Client](https://github.com/apache/inlong/tree/master/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/dataproxy/client.go) 接口对象后,调用相关的同步( `Send()` )或 异步( `SendAsync()` )接口来完成单条数据的上报任务,SDK 内部会根据 StreamID 将相同 StreamID 的数据批量上报。发送 Demo 可参考 [example_test.go](https://github.com/apache/inlong/tree/master/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/dataproxy/example_test.go)。 +整体流程包括以下三个步骤: + +### 初始化 SDK +```go +client, err := dataproxy.NewClient( + dataproxy.WithGroupID("test"), +dataproxy.WithURL("http://127.0.0.1:8083/inlong/manager/openapi/dataproxy/getIpList"), + dataproxy.WithMetricsName("test"), +) + +if err != nil { + fmt.Println(err) + return +} +``` + +参数说明: + +- `dataproxy.WithGroupID("test")` 设置了 GroupID ; +- `dataproxy.WithURL("http://127.0.0.1:8083/inlong/manager/openapi/dataproxy/getIpList")` 设置了 Manager 的 URL ; +- `dataproxy.WithMetricsName("test")` 设置了这个 `Client` 的指标中标签 "name" 的值; + +### 调用发送接口进行数据上报 + +SDK 的数据发送接口是协程安全的,支持以同步或者异步模式发送单条数据。Demo 里有同步的方式,也有异步的方式。 + +同步方式: + +```go +for i := 0; i < 1000; i++ { + err := client.Send(context.Background(), dataproxy.Message{ + GroupID: "test", + StreamID: "test", + Payload: []byte("test|a|b|c"), + }) + if err !=nil { + fmt.Println(err) + } +} +``` + +异步方式: + +```go +var success atomic.Uint64 +var failed atomic.Uint64 +for i := 0; i < 1000; i++ { + client.SendAsync(context.Background(), + dataproxy.Message{ + GroupID: "test", + StreamID: "test", + Payload: []byte("test|a|b|c"), + }, + func(msg dataproxy.Message, err error) { + if err != nil { + success.Add(1) + } else { + failed.Add(1) + } + }) +} + +// wait async send finish +time.Sleep(3 * time.Second) +fmt.Println("success:", success.Load()) +fmt.Println("failed:", failed.Load()) +``` + +我们推荐使用异步的方式发送,因为同步方式是无并发的,调用发送请求后需要等到响应或者超时,才能发下一条,在需要高吞吐量的场景是无法满足需求的。 + +### 关闭 SDK +关闭 SDK 只需要简单的调用 `Close()` 方法: + +```go +client.Close() +``` + +## 注意事项 +- `GroupID` 和 `URL` 是 SDK 初始化必选的配置,你可以使用 `dataproxy.WithGroupID()` 和 + `dataproxy.WithURL()` 来设置这些配置; +- 当你在一个进程里初始化多个 `Client` 实例时,`MetricsName` 必须配置不同的名称,否则指标查询将会失败,你可以使用 `dataproxy.WithMetricsName()` 来设置它; +- SDK 的默认配置已经能够满足运营需求,除非你需要调大或者调小配置,一般不需要更改其他配置,配置的默认值请参考后面的章节; +- SDK 的同步发送方法 `Send()` 是无并发的,在发送一个消息后,需要等待响应或者等待到超时才会返回,非必要的情况下不建议使用同步方法; +- SDK 默认会对消息进行2次重传,如果依然失败,需要调用者来决定如何做下一步处理。 + +## 错误 +常见错误如下: + +| 错误 | 描述 | +| ------------------------------------------------------------ | ---------------------------------- | +| errors.New("URL is not given") | Manager URL 未设置。 | +| errors.New("group ID is not given") | GroupID未设置。 | +| errors.New("invalid URL") | Manager URL 非法,可能为空。 | +| errors.New("invalid group ID") | GroupID 非法,可能为空。 | +| errors.New("service has no endpoints") | 服务无端点,服务发现失败 | +| errors.New("no available worker") | 没有可用工作者,工作者忙。 | +| errNo{code: 10001, strCode: "10001", message: "message send timeout"} | 发送超时。 | +| errNo{code: 10002, strCode: "10002", message: "message send failed"} | 发送失败。 | +| errNo{code: 10003, strCode: "10003", message: "producer already been closed"} | 生产者已关闭。 | +| errNo{code: 10004, strCode: "10004", message: "producer send queue is full"} | 发送队列满。 | +| errNo{code: 10005, strCode: "10005", message: "message context expired"} | 发送队列满,超时都未等到空闲位置。 | +| errNo{code: 10010, strCode: "10010", message: "input log is invalid"} | 输入的数据非法,可能为空。 | + +## 配置项 + +| 配置项 | 默认值 | 描述 | 可选 | +| --------------------------- | ---------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| WithGroupID() | "" | 设置GroupID | 否 | +| WithURL() | "" | 设置 Manager 的URL | 否 | +| WithUpdateInterval() | 5m | 设置服务发现的更新时间 | 是 | +| WithConnTimeout() | 3000ms | 设置连接超时 | 是 | +| WriteBufferSize | 8M | 设置写缓冲区大小 | 是 | +| WithReadBufferSize | 1M | 设置读缓冲区大小 | 是 | +| WithSocketSendBufferSize | 8M | 设置网络发送缓冲区大小 | 是 | +| WithSocketRecvBufferSize | 1M | 设置网络接收缓冲区大小 | 是 | +| WithBufferPool | nil | 设置缓冲池 | 是,如果应用有,建议共用 | +| WithBytePool | nil | 设置内存池 | 是,如果应用有,建议共用 | +| WithBufferPoolSize | 409600 | 设置缓冲池大小 | 是 | +| WithBytePoolSize | 409600 | 设置内存池大小 | 是 | +| WithBytePoolWidth | 同BatchingMaxSize | 设置内存池宽度 | 是 | +| WithLogger | std.out | 设置调试日志 | 是,不建议,默认的日志没有日志级别控制 | +| WithMetricsName | "dataproxy-go" | 设置指标名 | 是,如果一个应用实例化了多个 client ,必须配置不一样的指标名,否则指标获取会失败 | +| WithMetricsRegistry | prometheus.DefaultRegisterer | 设置指标存储器 | 是 | +| WithWorkerNum | 8 | 设置工作者数量 | 是 | +| WithSendTimeout | 30000ms | 设置发送超时 | 是 | +| WithMaxRetries | 2 | 设置量大重试次数 | 是 | +| WithBatchingMaxPublishDelay | 20ms | 设置消息发送延迟,超过该时间,不能构成一个批次也会发送 | 是 | +| WithBatchingMaxMessages | 50 | 设置批次消息条数,达到条数即批量发送 | 是 | +| WithBatchingMaxSize | 40K | 设置批次大小,达到该大小即批量发送 | 是 | +| WithMaxPendingMessages | 204800 | 设置每个工作者队列大小 | 是 | +| WithBlockIfQueueIsFull | false | 设置队列满是否阻塞 | 是 | +| WithAddColumns | nil | 设置附加字段,DataProxy 支持在消息指定的位置增加字段,如 \_\_addcol1\_\_worldid=xxx 表示所有的消息的第一列都是 worldid,值为 xxx 的 | 是 | + +配置项请参考 [options.go](https://github.com/apache/inlong/tree/master/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/dataproxy/options.go) + +## 指标 + +| 指标名 | 类型 | 标签 | 描述 | +| ---------------------------- | --------- | --------------------------------- | -------------------------------- | +| data_proxy_error_count | counter | name:名称<br />code:错误码 | 统计发生的错误次数及错误码 | +| data_proxy_retry_count | counter | name:名称<br />worker:工作者 ID | 统计发生的重试次数及工作者 ID | +| data_proxy_timeout_count | counter | name:名称<br />worker:工作者 ID | 统计发生的超时次数及工作者ID | +| data_proxy_msg_count | counter | name:名称<br />code:错误码 | 统计处理的消息数量和处理结果 | +| data_proxy_update_conn_count | counter | name:名称<br />code:错误码 | 统计发生的连接更新次数和错误码 | +| data_proxy_pending_msg_gauge | gauge | name:名称<br />worker:工作者 ID | 统计排队中的消息数量及工作者 ID | +| data_proxy_batch_size | histogram | name:名称<br />code:错误码 | 统计每个批次的大小和错误码 | +| data_proxy_batch_time | histogram | name:名称<br />code:错误码 | 统计每个批次的延迟和错误码 | + +指标请参考 [metrics.go](https://github.com/apache/inlong/tree/master/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/dataproxy/metrics.go) + +错误码请参考 [worker.go](https://github.com/apache/inlong/tree/master/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/dataproxy/worker.go) \ No newline at end of file