ALiyun LOG Go Consumer Library 快速入门及原理剖析

  • 时间:
  • 浏览:2

LogHubConfig是提供给用户的配置类,用于配置消费策略,您可不还都能不能 根据不同的需求设定不同的值,各参数含义如文章尾部图示 LogHubConfig全部配置

order属性:在单个shard中否有有按顺序消费。true:表示在单个shard中按顺序消费。shard分裂后,先消费原shard数据,也不并列消费四个 多新shard的数据。false:表示不按顺序消费。

timeout属性:表示consumer group中消费者的超时时间,单位是秒,当四个 多消费者汇报心跳的时间间隔超过timeout,会被认为不可能 超时,服务端认为這個consumer此时不可能 下线了。

1.消费失败防止依据

不可不还都能不能 服务端是怎样才能实现自动负载均衡的呢,还回到当消费者A,B一同持有四个 多分区的状态下,此时,不可能 新的消费者C注册加入到消费组当中来,服务端消费组会将logstore下所有的可消费分区对所有的消费者进行平均分配,如下图,从而在服务端自动的去实现负载均衡,用户即可无需关心消费者之间的负载均衡关系。

3.覆写消费逻辑

如上图,当前有四个 多消费者A和B ,分别持有1,2,3,四个 多分区进行消费,消费者A被取回 不可能 不可能 這個是因为 停止消费,服务端会自动将A消费者持有的1,2分区分配给B消费者进行消费。如下图

​ 消费者定期将分配给当时人的shard消费到的位置保存到服务端,从前当這個shard被分配给其它消费者时,从服务端可不还都能不能 获取shard的消费断点,接着从断点继续消费数据。

3.主系统多多线程 会遍历从心跳系统多多线程 获得的所有可消费分区,同都不将持有的消费分区汇报给心跳系统多多线程 ,每四个 多可消费分区都不调用consume依据。

4.每四个 多消费分区中的consume依据(如上图)只负责更新任务状态,调用会立刻返回,具体的消费任务会开启单独的groutine去执行,每个分区都不维护当时人的四个 多任务状态机,不同分区间任务状态无需相互影响。

调用InitConsumerWorkwer依据,将配置实例对象和消费函数传递到参数中生成消费者实例对象,调用Start依据进行消费。

(b.) 通过SDK将当前消费组重置到某四个 多时间点。

Aliyun LOG Go Consumer Library是用go语言编写的协同消费库,主要防止多个消费者一同消费logstore时自动分配shard大问题。 其中消费组会自动防止shard的负载均衡,消费者failover等逻辑,这主次说明会在本篇下面的篇幅中进行全部的介绍。用户只需专注在当时人业务逻辑上,而无需关心shard分配、CheckPoint、Failover等事宜。

​ 消费者心跳,consumer需用定期向服务端汇报四个 多心跳包,用于表明当时人还处于存活状态。

1.当调用四个 多消费者实例的run依据启动的前一天,会开启四个 多心跳系统多多线程 去给服务端发送当前心跳信息,一同主系统多多线程 继续执行,检查否有有获得可消费分区。

2.重置Checkpoint

2.配置LogHubConfig

下图为LogHubConfig全部配置参数。

2.Heartbeat心跳系统多多线程 会汇报当前消费者持有的消费分区到服务端,服务端会分配给消费者可消费的分区ID。

为了带您更好的理解 go版本的consumer library,本篇讲介绍consumer library的实现原理,在了解原理前一天,进行简单的术语简介。

请先克隆qq好友好友代码到当时人的GOPATH路径下(源码地址:aliyun-go-consumer-library),项目使用了vendor工具管理第三方依赖包,也不克隆qq好友好友下来项目前一天无需安装任何第三方工具包。

(a.) 删除消费组。

在补数据或重复计算等场景中,需用将某个ConsumerGroup点位设置为某四个 多时间点,使当前消费组要能从新位置始于英语 英语 消费。可通过以下某种依据完成。

​ 是logstore的子资源,拥有相同consumer group 名字的消费者一同消费同四个 多logstore的所有数据,哪几个消费者之间无需重复消费数据,四个 多logstore下面可不还都能不能 最多创建四个consumer group,不可不还都能不能 重名,同四个 多logstore下面的consumer group之间消费数据无需互相影响。consumer group有四个 多有点儿要的属性:

为了进一步减少学习成本,亲戚亲戚亲们 为您准备了 Aliyun LOG Go Consumer Library 应用实例。示例含高 高了consumer 从创建到关闭的全部流程。

(c.) 在process消费函数中返回需用重置的检查点。

5.每次消费任务完成,会调用flushCheck依据,检查当前时间相对上次更新检查点时间否有有超过60 秒,超过就刷新当前检查点到服务端。不可能 执行退出系统多多线程 函数,会立即将当前消费者的检查点保存到服务端。

当您拉取到日志对日志进行消费防止,防止失败的前一天,可不还都能不能 在process依据上方重新执行您的消费逻辑,不出现process依据,当process依据不始于英语 英语 的状态下会一直 防止当前未消费成功的数据,从而防止重复消费,以下为简单的样例:

在consumer library 中主要有四个 多概念,分别是consumer group,consumer,heartbeat和checkpoint,它们之间关系如下(图片出处:https://github.com/aliyun/loghub_consumer_library):

6.不可能 执行任务中处于可重试异常,会在任务groutine中重试该任务,也不会在每一次遍历中跳过当前正在执行的任务groutine,无需造成任务的重复开启。

consumer:

4.创建消费者并始于英语 英语 消费

1.源码下载

consumer group:

Aliyun LOG Go Consumer Library是四个 多使用简单以及强度可配置的go类库,它有如下功能特点:

​ 消费者,每个consumer上会被分配若干个shard,consumer的职责也不要消费哪几个shard上的数据,同四个 多consumer group中的consumer需用不重名。

上图中的例子通过go的信道做了os信号的监听,当监听到用户触发了os退出信号前一天,调用StopAndWait()依据进行退出,用户可不还都能不能 根据当时人的需用设计当时人的退出逻辑,只需用调用StopAndWait()即可。

checkpoint:

在实际消费当中,您只需用根据当时人的需用重新覆写消费函数process 即可,上图也不四个 多简单的demo,将consumer获取到的日志进行了打印防止,注意,该函数参数和返回值不可改变,也不会是因为 消费失败。

heartbeat:

5.关闭消费者