写点什么

伯克利开源 Confluo:吞吐量比 Kafka 高 4 到 10 倍

  • 2018-12-14
  • 本文字数:2890 字

    阅读完需:约 9 分钟

伯克利开源Confluo:吞吐量比Kafka高4到10倍

AI 前线导读:


伯克利 RISE 实验室又有新动作,最近开源了一个多数据流实时分布式分析系统 Confluo。它可以作为网络监控和诊断框架,也可以作为时序数据库和发布订阅消息系统。作为时序数据库,它的性能比其他时序数据库高出数倍,而作为发布消息订阅系统,它的吞吐量比 Kafka 高出 4 到 10 倍。具体请见下文。


更多干货内容请关注微信公众号“AI 前线”(ID:ai-front)


Confluo 是一个多数据流分析系统,可实现实时的分布式数据分析。Confluo 通过为多数据流的一些专门应用场景而精心设计的数据结构和针对端到端而优化的系统设计实现了高吞吐量并发写入、毫秒级在线查询和高效的即时查询。


我们很高兴将 Confluo 作为一个开源 C++项目,其中包括:



  • Confluo 的数据结构库,支持高吞吐量日志摄入,以及各种在线(实时聚合、条件触发器执行等)和离线(即时过滤器、聚合等)的查询;



  • Confluo 服务器实现,封装了数据结构,并提供 RPC 接口,以及 C++、Java 和 Python 客户端库。



我们针对几种不同的应用场景对 Confluo 进行了评估,包括:



  • 作为一个网络监控和诊断框架,Confluo 能够在单个核心上以线路速率(10Gbps 链路)执行数千个触发器和数十个过滤器。



  • 作为一个时间序列数据库,与其他先进的时序数据库相比(如 CorfuDB、TimescaleDB 和 BTrDB),Confluo 的吞吐量提高了 2 之 20 倍,写入延迟降低了 2 至 10 倍,吞吐量提高了 1.5 至 5 倍,时间区间查询延迟降低了 5 至 20 倍。



  • 作为一个 pub-sub 系统,Confluo 在发布订阅吞吐量方面是 Apache Kafka 的 4 至 10 倍。


Confluo 概览

很多现代应用程序,例如基于终端主机的网络监控、物联网和数字家庭一体化以及数据中心运营服务,它们的每台服务器每秒种都会捕获到数千万个数据点。这些数据被用于在线查询,实现可视化和监控,或者用于离线查询,进行故障分析和系统优化。要实现这些应用程序,需要一个实时监控和分析工具,能够支持高吞吐量数据摄取、低延迟的在线查询和低开销的离线查询。



虽然现在已有的数据结构可以支持高吞吐量数据摄取和丰富的在线和离线查询,但到目前为止,这两种数据结构仍然是互斥的。在从多个数据流摄取数据时,上述的查询需要更新多个数据结构——原始数据、聚合统计信息和物化视图。遗憾的是,用于支持这些查询的数据结构往往具有较高的更新开销,而且无法维持大多数应用程序所需的数据摄取速率。另一方面,可以维持高数据摄取速率的数据结构往往只支持非常简单的查询。


为了应对这一挑战,我们构建了 Confluo,一个同时实现了高吞吐量数据摄取和丰富的离线和在线查询的系统。

假设

Confluo 通过利用其目标应用程序语义来简化底层系统的假设,从而实现上述的目标。Confluo 的主要简化假设是:



  • 应用程序数据流表现出一次性写入语义(即数据是追加写入的);



  • 监控和诊断应用程序使用固定大小的属性(例如,网络数据包中固定宽度的标头,分布式传感器网络中的 64 位时间戳和温度读数,数据中心操作指标中的浮点精度 CPU 和内存统计信息等);



  • 应用程序不需要事务性语义来进行并发操作,原子性语义就足够了。


Confluo API

Confluo 操作数据流,数据流由记录组成,记录使用了包含强类型属性集合的预定义模式(schema)。如上所述,Confluo 目前只支持固定大小的属性,包括原始数据类型,如二进制、整数或浮点数,或特定于域的类型,如 IP 地址、端口、传感器读数等。


Confluo 的模式是强类型属性的集合,语义类似于 JSON,例如,下面是一个带有五个属性的简单模式示例:


{    timestamp: LONG,    op_latency_ms: DOUBLE,    cpu_util: DOUBLE,    mem_avail: DOUBLE,    log_msg: STRING(100)}
复制代码


目前,Confluo 只支持具有固定模式的数据流,即数据流中的记录必须符合给定的模式。


为了加速即时离线查询,可以为模式中的属性添加索引。为了支持在线查询,Confluo 还采用一种匹配操作语言,其中包含三个主要元素:过滤器、聚合和触发器。


Confluo 过滤器是一种表达式,由任意有界宽度属性和关系运算符及布尔运算符组成(参见下表),用于标识与表达式匹配的记录。



Confluo 聚合(参见下表)用于计算与特定过滤器表达式相匹配的所有记录的属性的可计算函数。



Confluo 触发器是基于 Confluo 聚合计算得到的布尔条件(例如<、>、=等)。



Confluo 只支持为模式中具有固定大小的属性创建索引、过滤器、聚合和触发器。在添加好这些东西后,在新的数据记录到达时,它们都会被计算和更新。Confluo 目前不支持连接操作,因为在大多数监控和诊断应用程序中,这个操作并不常见。

实现

Confluo 使用了一种新的数据结构作为数据流的基本存储抽象:Atomic MultiLog,一组无锁并发日志,可用于存储原始数据、聚合统计信息和物化视图,并使用新的技术将整个集合作为单个原子操作进行更新。Atomic MultiLog 利用上述的应用程序工作负载假设来实现高吞吐量数据摄取和丰富的在线和离线查询。



Atomic MultiLogs 与数据库表的接口有点类似。为了存储来自不同流的数据,应用程序可以创建具有预定义模式的 Atomic MultiLog,并写入符合模式的数据流。然后,应用程序在 Atomic MultiLog 上创建索引、过滤器、聚合和触发器,为各种监控和诊断功能提供支持。


有关如何实现和使用 Confluo 的更多信息,请查看相关文档(https://ucbrise.github.io/confluo/)。

性能


我们针对各种应用程序对 Confluo 进行了评估,包括网络监控和诊断、时间序列数据库和 pub-sub 消息系统。上图显示了 Confluo 在时间序列数据库应用程序中的性能表现,并将其与运行在配备了 18 个 CPU 内核和 60GB RAM 的 EC2 c4.8xlarge 实例上的 BTrDB、CorfuDB 和 TimescaleDB 进行了比较。我们使用了开放式uPMU数据集的 5 亿个记录子集,这个数据集包含了安装在电网中的多个μPMU 的电压、电流和相位的读数,为期三个月。


我们发现,像 CorfuDB 和 TimescaleDB 这样的系统的性能比 BTrDB 和 Confluo 低 10 倍。但请注意,这不算是个缺点:CorfuDB 和 TimescaleDB 支持比 BTrDB 和 Confluo 更强的(事务性)语义。因此,根据所需语义的不同,任何一类系统对底层应用程序来说都可能是有用的。总而言之,与最先进的时间序列数据库相比,Confluo 的写入速度提高了 2 至 20 倍,写入延迟降低了 2 至 10 倍,时间区间过滤器的吞吐量提高了 1.5 至 5 倍,延迟降低了 5 至 20 倍。


网络监控和诊断工具的比较结果可以在我们即将发布的NSDI论文中找到,而 pub-sub 系统的比较结果可以在这里找到。

限制

如前所述,Confluo 做了一些简化的假设,从而能够有效地实现各种在线和离线查询,同时支持每台服务器摄取数千万个数据点。因此,Confluo 只支持具有固定宽度的数据属性。此外,Confluo 目前只支持具有严格模式的流,不过我们也正在努力支持更灵活的模式。

展望未来

我们正在开发另外几个有趣的项目,以便让 Confluo 更具表现力并进一步提升效率。包括支持使用草图对数据流进行近似查询,支持基于数据流的 SQL 接口,以及通过文件合并和内存池来提高性能。要了解有关 Confluo 的更多信息,请访问我们的项目网站和 GitHub 存储库。


原文链接:


https://rise.cs.berkeley.edu/blog/confluo-millisecond-level-queries-on-large-scale-streaming-data/


2018-12-14 09:005038
用户头像

发布了 322 篇内容, 共 143.0 次阅读, 收获喜欢 147 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

失败的小项目

箭上有毒

生活随想 8月日更

感恩架构实战营学习的一路陪伴、不断进度!

arctec

Regan Yue带你一起学习微软AZ-900认证的有关知识「 第Ⅱ章」

Regan Yue

云计算 微软 后端 8月日更

贡献数字力量 浪潮云洲赋能广州箱包皮具产业集群

工业互联网

Windows 中 Node.js 中 nvm 的安装配置和使用

HoneyMoose

手撸二叉树之数据流中的第 K 大元素

HelloWorld杰少

数据结构与算法 8月日更

Vue进阶(二十六):详解 router.push()

No Silver Bullet

Vue router 8月日更

小手哆嗦一下,就能用 Python Django 实现一个微型博客系统

梦想橡皮擦

8月日更

零代码上线小布对话技能:技能平台的实践与思考

OPPO小布助手

人工智能 自然语言处理 算法 零代码 语义理解

JNI不正确的信号处理导致 JVM 崩溃问题分析

毕昇JDK社区

SpringBoot 日志配置(logback)

xcbeyond

springboot logback 8月日更

Habor 入门指南

Se7en

从0开始的TypeScriptの四:接口Interfaces · 上

空城机

JavaScript typescript 大前端 8月日更

Vue进阶(二十五):<component>实现动态组件

No Silver Bullet

Vue 动态组件 8月日更

Linux之traceroute命令

入门小站

Linux

架构实战营模块 5 作业

zlz

Nvm 安装新的 nodejs 版本

HoneyMoose

VSCode July 2021 (version 1.59) 更新

IT蜗壳-Tango

8月日更

Node.js 实现存储服务的下载功能【包含前后端代码】

liuzhen007

8月日更

失败的小项目-Tiktok搬运

箭上有毒

8月日更

电商秒杀系统架构设计

arctec

【Vue2.x 源码学习】第三十二篇 - diff算法-乱序比对

Brave

源码 vue2 8月日更

prometheus 语法

Rubble

Prometheus 8月日更

Linux Docker 中安装 Jenkins 并实现 Maven 工程自动化部署

陈皮的JavaLib

Java maven jenkins 8月日更

HashMap面试中的12个点

4ye

Java 面试 后端 hashmap 8月日更

【Flutter 专题】72 图解极简自定义跑马灯 ACEMarquee

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

netty系列之:使用POJO替代buf

程序那些事

Java Netty nio 程序那些事

自媒体培训行业水很深,入行新人要谨慎选择

石头IT视角

Java环境配置:Eclipse简单上手

Bob

Java eclipse 8月日更

架构实战营模块 4 作业

zlz

在线圆周率查询下载工具

入门小站

工具

伯克利开源Confluo:吞吐量比Kafka高4到10倍_大数据_ANURAG KHANDELWAL_InfoQ精选文章