Cette série d’articles a été très amusante pour moi car j’ai découvert et exploré les nouvelles technologies. C'est aussi amusant de voir ce qui a fait son chemin depuis que je l'ai découvert. Mon dernier article sur Apache Paimon a été incroyablement populaire, à ma grande surprise, mais il semble que je n'étais pas le seul à m'intéresser à ce que c'était. Grâce à cet article, je suis tombé sur le projet open source sous licence Apache 2.0, Proton , sponsorisé par Timeplus . Il s'agit d'une base de données SQL qui contient à la fois des données historiques et en continu. Écrit en C++ et optimisé par ClickHouse , l'accent est mis sur la simplicité et les performances. Avec un seul exécutable, l'installation est simple.
Une tendance que j'ai constatée est que de plus en plus d'applications d'analyse en temps réel sont créées, mais vous ne voulez pas les créer deux fois. Une fois pour le streaming et une fois pour le remplissage historique. Il y aurait des avantages certains à disposer d'une plate-forme unique capable d'interroger en mode batch ou en streaming, ou même en mode hybride dans lequel vous joignez des données historiques à un flux de données entrantes. Il semble que Proton ait été conçu pour cela.
En un mot, nous disposons d'une base de données ClickHouse et Timeplus a ajouté la prise en charge des services de streaming. Cela devrait vous offrir un moteur de requête de type Flink et un stockage en streaming de type Kafka avec cette base de données ClickHouse. Alors, à quoi ça ressemble ?
La ligne pointillée est l'endroit où Proton entre en jeu. Je suggère de lire la documentation sur l'architecture pour avoir une bonne idée de ce qui est possible.
Pour créer un flux aléatoire de données et l'interroger avec Proton, nous pouvons faire quelque chose comme ceci :
-- Create a stream with random data. CREATE RANDOM STREAM devices(device string default 'device'||to_string(rand()%4), temperature float default rand()%1000/10); -- Run the long-running stream query. SELECT device, count(*), min(temperature), max(temperature) FROM devices GROUP BY device; ┌─device──┬─count()─┬─min(temperature)─┬─max(temperature)─┐ │ device0 │ 2256 │ 0 │ 99.6 │ │ device1 │ 2260 │ 0.1 │ 99.7 │ │ device3 │ 2259 │ 0.3 │ 99.9 │ │ device2 │ 2225 │ 0.2 │ 99.8 │ └─────────┴─────────┴──────────────────┴──────────────────┘
Proton possède de nombreuses fonctionnalités intéressantes ; celui qui m'a immédiatement frappé a été la possibilité de créer une vue matérialisée pour enregistrer des événements spécifiques dans Proton. En empruntant à la documentation, disons que vous disposez d'un flux Kafka signalant les événements Web et que vous souhaitez enregistrer les rapports sur les liens rompus afin de pouvoir les interroger plus tard, même avec Kafka arrêté ou les événements supprimés. Cela ressemblerait à ceci :
create materialized view mv_broken_links as select raw:requestedUrl as url,raw:method as method, raw:ipAddress as ip, raw:response.statusCode as statusCode, domain(raw:headers.referrer) as referrer from frontend_events where raw:response.statusCode<>'200';
Ensuite, si vous souhaitez interroger directement la vue matérialisée et créer un graphique à barres à partir des données, cela ressemblerait à ceci :
-- streaming query select * from mv_broken_links; -- historical query select method, count() as cnt, bar(cnt,0,40,5) as bar from table(mv_broken_links) group by method order by cnt desc; ┌─method─┬─cnt─┬─bar─┐ │ GET │ 25 │ ███ │ │ DELETE │ 20 │ ██▌ │ │ HEAD │ 17 │ ██ │ │ POST │ 17 │ ██ │ │ PUT │ 17 │ ██ │ │ PATCH │ 17 │ ██ │ └────────┴─────┴─────┘
Certaines de ces fonctionnalités me rappellent Upsolver , une entreprise dans laquelle j'ai travaillé il y a quelques années.
Des pilotes pour d'autres langages sont disponibles pour Java, Go et Python. Utiliser Proton avec quelque chose comme Redpanda représenterait une empreinte minimale pour la diffusion de données historiques.
De nombreuses autres fonctionnalités sont disponibles, mais ceci n'est pas censé être un didacticiel. Je souhaite faire une explication légère et attirer l'attention sur certaines fonctionnalités. Les documents sont concis et, dans l’ensemble, bien écrits, certainement meilleurs que de nombreux projets open source.
Bien que je n'aie pas personnellement besoin de ce genre d'arrangement pour le moment, j'ai certainement été dans des endroits et vu des entreprises où ce serait très, très cool d'avoir cela. Aussi cool que ce type ?
Probablement pas, mais là encore, rien ne l'est :). Frivolité mise à part, l'équipe Proton a fait un excellent travail en documentant le projet et en le rendant aussi simple à installer et à utiliser que possible. J'adore ces projets mono-binaires qui n'ont pas besoin d'un vaste écosystème Java avec des tonnes de dépendances. Ne vous y trompez pas, Timeplus propose une version commerciale qui vous offre plus de fonctionnalités que la version d'origine de Proton. Cependant, ils semblent très favorables à Proton et accueillants envers la communauté.
Consultez mes autres articles What the Heck is… sur les liens ci-dessous :