Timeplus-proton流处理器调研

概念

在这里插入图片描述

Timeplus是一个流处理器。它提供强大的端到端功能,利用开源流引擎Proton来帮助数据团队快速直观地处理流数据和历史数据,可供各种规模和行业的组织使用。它使数据工程师和平台工程师能够使用 SQL 释放流数据价值。

Timeplus 控制台可以轻松连接到不同的数据源(例如 Apache Kafka、Confluence Cloud、Redpanda、NATS、Web Socket/SSE、CSV 文件上传等)、通过 SQL 查询探索流模式、发送实时见解和向其他系统或个人发出警报,并创建仪表板和可视化。

  • 关于Timeplus 与 proton的关系
    Proton是Timeplus开源的核心系统。 Timeplus Cloud是云端的Proton,支持多租户,外加 Web UI,dashboard, alert,血缘图,和一些Proton不支持的数据源(通过额外组建)。
    对于 On-prem(私有化)部署,官方提供了Timeplus Enterprise,功能和 Timeplus Cloud 相似。

  • Timeplus 与Clickhouse的关系
    Timeplus的Proton就是基于ClickHouse开发的或者说内置ClickHouse(就是一个 proton 进程),去掉一些不需要的ClickHouse 的功能和函数,加入流计算能力和一个流存储。
    event数据先进入这个 streaming storage,实现small batch write,然后再自动转批写到 OLAP 存储。
    必须明确的是Timeplus的Proton与现有Clickhouse集群没关系,timeplus需要依赖自己内部Proton(改造的clickhouse)提供计算能力,而不能依赖现有的clickhouse提供的计算能力,但支持读写远程的clickhouse集群。

  • Timeplus两种运行方式

    1. 最简单就是 All In One,用 Timeplus 自己做历史存储,也做流存储,自己做流计算,也自己做历史计算
    2. 当你有数据在 ClickHouse 时,也可以把 Timeplus 当 Flink等流处理框架用,从 Kafka 读数据,写到远程的 ClickHouse
  • Timeplus语法
    Timeplus的SQL语法类似Clickhouse语法,支持ClickHouse协议,加上自己的一些tumble/hop/session方法在Flink等流程处理常见的函数。

  • 消息触发机制
    Timeplus的触发机制是micro-batch,而不是per event trigger,但可以做到毫秒级。
    如果是 global aggregation 默认是2秒发一次聚合数据,这个用户可以自定义,最大可以支持到微秒。
    Timeplus的触发策略还是比较全的,也是一大优势。

  • Timeplus与RisingWave比较
    Timeplus与流处理数据库RisingWave相比较,最大的优势是Timeplus可以很好的支持随机分析,因为其底层基于Clickhouse。

部署环境

获取docker编排文件

wget https://github.com/timeplus-io/proton/blob/develop/examples/ecommerce/docker-compose.yml

启动服务

docker compose up -d

在这里插入图片描述

进入客户端:

docker exec -it proton-demo-ecommerce-proton-1 proton-client

实例demo

ecommerce case

DROP STREAM default.frontend_events0;
CREATE STREAM frontend_events0(raw string) \
SETTINGS type='kafka', \brokers='redpanda:9092',\topic='owlshop-frontend-events';-- Create externarl stream to read data from Kafka/Redpanda
CREATE EXTERNAL STREAM frontend_events(raw string)
SETTINGS type='kafka', brokers='redpanda:9092',topic='owlshop-frontend-events';-- Scan incoming events
select * from frontend_events;-- Get live count
select count() from frontend_events;-- Filter events by JSON attributes
select _tp_time, raw:ipAddress, raw:requestedUrl from frontend_events where raw:method='POST';-- Show a live ASCII bar chart
select raw:method, count() as cnt, bar(cnt, 0, 40,5) as bar from frontend_events group by raw:method order by cnt desc limit 5 by emit_version();

MATERIALIZED VIEW

CREATE MATERIALIZED VIEW IF NOT EXISTS mv01 \
AS select _tp_time, raw:ipAddress, raw:requestedUrl from frontend_events where raw:method='POST';--1. Streaming mode: SELECT * FROM materialized_view
SELECT * FROM mv01;--2.Historical mode: SELECT * FROM table(materialized_view)
SELECT * FROM table(mv01);--3.Historical + streaming mode: SELECT * FROM materialized_view WHERE _tp_time>='1970-01-01' Get all past results and as well as the future data.
SELECT * FROM mv01 WHERE _tp_time>='1970-01-01';--4.Pre-aggregation mode: SELECT * FROM table(materialized_view) where __tp_version in (SELECT max(__tp_version) as m from table(materialized_view)) This immediately returns the most recent query result. We will provide new syntax to simplify this.

监控case

数据按照预设的时间批次进行分组,例如:2024-01-01 08:00:00、2024-01-01 08-30:00,并实时统计每个批次内的数据计数。
当批次数据计数在指定的延迟时间内未达到预设数量时(例如,从2024-01-01 08:00:00延迟1小时,触发时间为系统时间2024-01-01 09:00:00),会触发警报。发布批量数据的指标包括批量时间、触发报警时的计数数据量等

create stream s1(ts datetime64,cnt int32);
insert into s1(ts,cnt) values('2024-02-28 20:59:00',2);select * from s1 where ts < now()-1m \
emit last 5m on proctime;

关于Timeplus

github 仓库

官方文档

Timeplus知乎主页

Slack

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8S相关小技巧《一》

在实际使用Kubernetes的时候有一些常用的小技巧&#xff0c;在此分享给大家&#xff1a; 获取用于拉取docker的密钥的原本值&#xff0c;k8s docker registry pull secret decode&#xff1a; kubectl get secret/registry-pull-secret -n kube-iapply-qa -o json | jq .data…

女性三八节礼物攻略:她无法抗拒的五大礼物

随着春风的温柔拂面&#xff0c;我们即将迎来一年一度的三八国际妇女节。这个特别的日子&#xff0c;不仅是对女性贡献的认可和庆祝&#xff0c;也是向我们生命中的女性表达感激和爱意的绝佳时机。在这个充满温馨和敬意的时刻&#xff0c;我们常常在思考&#xff0c;如何用一份…

信息学奥赛一本通1310:【例2.2】车厢重组

1310&#xff1a;【例2.2】车厢重组 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 48051 通过数: 28919 【题目描述】 在一个旧式的火车站旁边有一座桥&#xff0c;其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢&#xff0c…

elementUI el-table中的对齐问题

用elementUI时&#xff0c;遇到了一个无法对齐的问题&#xff1a;代码如下&#xff1a; <el-table :data"form.dataList" <el-table-column label"验收结论" prop"checkResult" width"200"> <template slot-sco…

0005TS函数类型详解

TypeScript 中的函数类型用于为函数定义参数类型和返回值类型。这提供了一个清晰的契约&#xff0c;指明函数应该如何被调用和期望返回什么类型的结果。以下是 TypeScript 中函数类型的一些基本用法和概念&#xff1a; 函数声明 在 TypeScript 中&#xff0c;你可以为函数的参…

揭秘!Excel如何成为职场中的价值创造利器

文章目录 一、Excel在生产力提升中的作用二、Excel在创造价值方面的应用案例三、Excel实用技巧分享四、Excel与其他工具的协同应用五、Excel学习的建议与展望《Excel函数与公式应用大全》亮点内容简介作者简介目录 在当今信息爆炸的时代&#xff0c;数据处理和分析能力已成为职…

AI智能分析网关V4智慧商场方案,打造智慧化商业管理生态

AI智能视频检测技术在商场楼宇管理中的应用越来越广泛。通过实时监控、自动识别异常事件和智能预警&#xff0c;这项技术为商场管理提供了更高效、更安全的保障。今天我们以TSINGSEE青犀视频AI智能分析网关为例&#xff0c;给大家介绍一下AI视频智能分析技术如何应用在商场楼宇…

抢单情况下的均衡分配机制

背景&#xff1a; 1、工单有多种类型。 2、客户提交工单。 3、不同客服受理不同类型工单&#xff0c;受理工单类型存在交叉。 4、按照类型维度实现均衡分配。 方案&#xff1a; 1、为每种类型创建一个工单池&#xff0c;使用队列&#xff0c;左进右出&#xff1b;客户提交…

Android AIDL RemoteCallbackLIst

RemoteCallbackLIst 参考地址 RemoteCallbackList 是 Android SDK 中的一个类&#xff0c;用于帮助管理进程之间的回调。它专为进程间通信 (IPC) 场景而设计&#xff0c;在该场景中&#xff0c;应用程序的不同部分甚至不同的应用程序可能在不同的进程中运行。 以下是其关键功能…

将所有字母转化为该字母后的第三个字母,即A->D,B->E

//编写加密程序&#xff0c;规则&#xff1a;将所有字母转化为该字母后的第三个字母&#xff0c;即A->D,B->E,C->F,…Y->B,Z->C //小写字母同上&#xff0c;其他字符不做转化。输入&#xff1a;I love 007 输出&#xff1a;L oryh 007 代码&#xff1a; #inc…

GVA快速使用

1. clone 代码&#xff0c; 使用goland打开Server目录&#xff0c; 使用vsc打开前端web目录&#xff0c;运行后端&#xff0c;前端 gin-vue-admin后台管理系统 - 知乎 (zhihu.com) 2.了解端口配置 参考&#xff0c; 基于Go的后台管理框架Gin-vue-admin_go vue admin-CSDN博客…

配置MMDetection的solov2攻略整理

目录 一、MMDetection 特性 常见用法 二、ubuntu20.04配置solov2 三、Windows11配置solov2 一、MMDetection MMDetection是一个用于目标检测的开源框架&#xff0c;由OpenMMLab开发和维护。它提供了丰富的预训练模型和模块&#xff0c;可以用于各种目标检测任务&#xff…

kamacoder 11.共同祖先的C语言奇妙解法

11. 共同祖先 时间限制&#xff1a;1.000S 空间限制&#xff1a;32MB 题目描述 小明发现和小宇有共同祖先&#xff01;现在小明想知道小宇是他的长辈&#xff0c;晚辈&#xff0c;还是兄弟。 输入描述 输入包含多组测试数据。每组首先输入一个整数N&#xff08;N<10&a…

redis的基本数据类型(一)

redis的基本数据类型 1、redis1.1、数据库分类1.2、NoSQL分类1.3、redis简介1.4、redis应用1.5、如何学习redis 2、redis的安装2.1、Windows安装2.2.1、客户端redis管理工具 2.2、Linux安装&#x1f525;2.2.1、redis核心文件2.2.2、启动方式2.2.3、redis桌面客户端1、redis命令…

定义类的成员比较函数,并在类的成员函数里面调用

定义一个自定义排序规则的成员函数&#xff0c;然后在类的成员函数中调用 文章目录 1.声明为static函数2.使用function3.使用匿名函数 1.声明为static函数 #include <iostream> #include <algorithm> #include <list> class A { public:A(){std::list<i…

Python进阶学习:Pickle模块--dump()和load()的用法

Python进阶学习&#xff1a;Pickle模块–dump()和load()的用法 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您…

MyBatis-Plus 框架中的自定义元对象处理器

目录 一、代码展示二、代码解读 一、代码展示 package com.minster.yanapi.handler;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.util…

JavaScript解构赋值--数组解构赋值与对象解构赋值

前言 解构赋值是JavaScript的一个强大特性&#xff0c;允许从数组或对象中提取数据&#xff0c;并赋值给定义的变量。 对象解构 直接根据属性名来解构赋值&#xff1a; const person { name: 张三, age: 30 };const { name, age } person;console.log(name); console.lo…

动态路由使用

目录 添加动态路由 添加单个路由 添加多个路由 指定路由添加的位置 导航守卫添加路由 删除动态路由 添加动态路由 添加动态路由的方法有两个&#xff1a;addRoutes&#xff08;添加多个路由&#xff09;和addRoute&#xff08;添加单个路由&#xff09;&#xff0c;但是a…

ASO 对App产品性能的影响

可发现性 拥有出色的App还不足以让人们发现它&#xff0c;ASO技术通过提高搜索排名来增强App的可发现性。当用户可以在搜索结果中轻松找到应用程序时&#xff0c;那么下载和成功的潜力就会飙升。 设定期望 实施有效的应用商店优化不仅可以为潜在用户建立正确的期望&#xf…