通道服务是基于表格存储数据接口的全增量一体化服务,可以帮助您对表中历史存量数据和新增数据进行消费处理。

Tunnel Client 为通道服务的自动化数据消费框架。Tunnel Client 通过每一轮的定时心跳探测(Heartbeat)进行如下操作:
  • 活跃 Channel 的探测
  • Channel 和 ChannelConnect 状态的更新
  • 数据处理任务的初始化、运行和结束等

TunnelWorkerConfig 为用户提供 Tunnel Client 的自定义配置,包括:

  • Heartbeat 的间隔和超时时间
  • 记录消费位点的时间间隔
  • 客户端的自定义标识
  • 数据处理的自定义 Callback
  • 数据读取和数据处理的线程池资源配置
  • 内存控制(5.4.0 及以上版本支持)
  • 最大退避时间配置(5.4.0 及以上版本支持)

配置说明

  • Heartbeat 相关
    • heartbeatTimeoutInSec:Heartbeat 的超时间隔,默认 300 秒。当 Heartbeat 发生超时,Tunnel 服务端会认为当前 TunnelClient 不可用(失活),客户端需要重新的进行 ConnectTunnel。
    • heartbeatIntervalInSec:进行 Heartbeat 的间隔,默认 30 秒。Heartbeat 用于活跃 Channel 的探测、Channel 状态的更新、 (自动化)数据拉取任务的初始化等。该参数最小支持自定义到5秒。
  • Checkpoint 时间间隔

    checkpointIntervalInMillis: 用户消费完数据后,向 Tunnel 服务端进行记录消费位点操作(Checkpoint)的时间间隔。单位为 ms,默认为 5000ms。

    说明
    • 因为读取任务所在机器不同,进程可能会遇到各种类型的错误。例如因为环境因素重启,需要定期对处理完的数据做记录(checkpoint)。当任务重启后,会接着上次的 checkpoint 继续往后做。在极端情况下,Tunnel Service 不保证传给您的记录只有一次,只会保证数据至少传一次,且记录的顺序不变。如果出现局部数据重复发送的情况,需要您注意业务的处理逻辑。
    • 如果您希望减少在出错情况下数据的重复处理,可以增加做 checkpoint 的频率。但是过于频繁的 checkpoint 会降低系统的吞吐量,请根据自身业务特点决定 checkpoint 的操作频率。
  • 客户端的自定义标识

    clientTag: 客户端的自定义标识,用于生成 Tunnel Client ID。用户可以自定义此参数来区分TunnelWorker。

  • 数据处理的自定义Callback

    channelProcessor: 用户注册的处理数据的 Callback,包括 process 和 shutdown 方法。

  • 数据读取和数据处理的线程池资源配置
    • readRecordsExecutor: 用于数据读取的线程池资源。无特殊需求,建议使用默认的配置。
    • processRecordsExecutor: 用于处理数据的线程池资源。无特殊需求,建议使用默认的配置。
    说明
    • 自定义上述线程池时,线程池中的线程数要和 Tunnel 中的 Channel 数尽可能一致,这样可以保障每个 Channel 都能很快的分配到计算资源(CPU)。
    • 在默认线程池配置中,为保障吞吐量,我们进行了如下操作:
      • 默认预先分配 32 个核心线程,以保障数据较小时(Channel 数较少时)的实时吞吐。
      • 工作队列的大小适当调小,这样在用户数据量比较大(Channel 数较多)时,可以更快的触发线程池新建线程的策略,及时的弹起更多的计算资源。
      • 设置了默认的线程保活时间(默认 60s),当数据量降下后,可以及时回收线程资源。
  • 内存控制

    maxChannelParallel:读取和处理数据的最大 Channel 并行度,可用于内存控制,默认为 -1,表示不限制最大并行度。

    说明 仅 5.4.0 及以上版本支持。
  • 最大退避时间配置

    maxRetryIntervalInMillis:Tunnel 的最大退避时间基准值配置。最小支持配置到 200ms,默认值为 2000ms。最大退避时间会在这个基准值附近随机,具体范围:0.75 * maxRetryIntervalInMillis ~ 1.25 * maxRetryIntervalInMillis。

    说明
    • 仅 5.4.0 及以上版本支持。
    • Tunnel 对于数据量较小的情况(单次拉取小于 900KB 或 500条)会进行一定时间的指数退避,直至达到最大退避时间。