智能设备日志解决方案(3):上下游对接

数据队列

当数据从遍布全球的设备端以及服务端采集上来后,最先会到达数据队列。队列承载所有数据的入口和出口,必须具备的两大能力是:

丰富的上下游对接能力:数据要能从各种方式接入上来,也能够非常容易的对接各个系统。弹性伸缩能力:当服务量级上升后,如何快速的扩容;同时如何面对未知的流量激增,防止系统突然打爆。下面将从这两个方面介绍日志服务LogHub的相关能力:

上下游生态对接

为了能降低用户使用负担,与生态更好结合,我们也在积极拓展LogHub上下游的生态,包括:

采集端:Logstash、Beats、Log4J等实时消费端(流计算):Flink/Blink、Storm、Samza等存储端(数仓):Hadoop、Spark、Presto、Hive等

截止5月已支持30+ 数据接入方案(包括最完整K8S方案)、以及对主流流计算、数据仓库等引擎支持。

](http://ata2-img.cn-hangzhou.img-pub.aliyun-inc.com/5b8cb23e8a6b5ad9c603d15271c465b8.png)

弹性伸缩

​在解决各类上下游对接问题后,我们把问题聚焦在服务端流量这个问题上。熟悉Kafka都知道,通过Partition策略可以将服务端处理资源标准化:例如定义一个标准的单元Partition或Shard(例如每个Shard固定5MB/S写,10MB/S读)。当业务高峰期时,可以后台Split Shard以获取2倍的吞吐量。

这种方法看起来很工程化,但在使用过程中有两个难以绕开的现实问题:

业务无法预测:事先无法准确预估数据量,预设多少个shard才合适呢人的反应滞后:数据量随时会突增,人不一定能够及时处理,长时间超出服务端负载能力会有数据丢失风险

​ 针对以上情况,LogHub提供了全球首创Shard自动分裂功能:在用户开启该功能后,后台系统实时监控每个shard的流量,如果发现一个shard的写入在一段时间内,有连续出现超过shard处理能力的情况,会触发shard的自动分裂,时刻保障业务流量。