Skip to main content

Timeplus Proton

Timeplus Proton is a stream processing engine and database. It is fast and lightweight alternative to ksqlDB or Apache Flink, powered by the libraries and engines in ClickHouse. It enables developers to solve streaming data processing, multi-stream JOINs, sophisticated incremental materialized views, routing and analytics challenges from Apache Kafka, Redpanda and more sources, and send aggregated data to the downstream systems. Timeplus Proton is the core engine of Timeplus Enterprise.

πŸ’ͺ Why use Timeplus Proton?​

  1. Apache Flink or ksqlDB alternative. Timeplus Proton provides powerful streaming SQL functionalities, such as streaming ETL, tumble/hop/session windows, watermarks, materialized views, CDC and data revision processing, etc. In contrast to pure stream processors, it also stores queryable analytical/row based materialized views within Proton itself for use in analytics dashboards and applications.
  2. Fast. Timeplus Proton is written in C++, with optimized performance through SIMD. For example, on an Apple MacBookPro with M2 Max, Timeplus Proton can deliver 90 million EPS, 4 millisecond end-to-end latency, and high cardinality aggregation with 1 million unique keys.
  3. Lightweight. Timeplus Proton is a single binary (<500MB). No JVM or any other dependencies. You can also run it with Docker, or on an AWS t2.nano instance (1 vCPU and 0.5 GiB memory).
  4. Powered by the fast, resource efficient and mature ClickHouse. Timeplus Proton extends the historical data, storage, and computing functionality of ClickHouse with stream processing. Thousands of SQL functions are available in Timeplus Proton. Billions of rows are queried in milliseconds.
  5. Best streaming SQL engine for Kafka or Redpanda. Query the live data in Kafka or other compatible streaming data platforms, with external streams.

Proton Architecture See our architecture doc for technical details and our FAQ for more information.

How is it different from ClickHouse?​

ClickHouse is an extremely performant Data Warehouse built for fast analytical queries on large amounts of data. While it does support ingesting data from streaming sources such as Apache Kafka, it is itself not a stream processing engine which can transform and join streaming event data based on time-based semantics to detect patterns that need to be acted upon as soon as it happens. ClickHouse also has incremental materialized view capability but is limited to creating materialized view off of ingestion of blocks to a single table.

Timeplus Proton uses ClickHouse as a table store engine inside of each stream (alongside a Write Ahead Log and other data structures) and uses to unify real-time and historical data together to detect signals in the data. In addition, Timeplus Proton can act as an advanced data pre-processor for ClickHouse (and similar systems) where the bulk of the data preparation and batching is done ahead of ingestion. See Timeplus and ClickHouse for more details on this.

🎬 Demo Video​

⚑ Deployment​

curl https://install.timeplus.com/oss | sh

For more guidelines, please check the installation guide for Docker or Homebrew.

Timeplus Cloud​

Don't want to setup by yourself? Try Timeplus in Cloud.

πŸ”Ž Usage​

SQL is the main interface. You can start a new terminal window with proton client to start the SQL shell.

info

You can also integrate Timeplus Proton with Python/Java/Go SDK, REST API, or BI plugins. Please check Integration.

In the proton client, you can write SQL to create External Stream for Kafka or External Table for ClickHouse.

You can also run the following SQL to create a stream of random data:

-- 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 streaming SQL
SELECT device, count(*), min(temperature), max(temperature)
FROM devices GROUP BY device;

You should see data like the following:

β”Œβ”€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 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

⏩ What's next?​

To see more examples of using Timeplus Proton, check out the examples folder.

To access more features, such as sources, sinks, dashboards, alerts, and data lineage, create a workspace on Timeplus Cloud or try our live demo with pre-built live data and dashboards.

🧩 Integration​

The following drivers are available:

Integration with other systems:

Contributing​

We welcome your contributions! If you are looking for issues to work on, try looking at the issue list.

Please see the wiki for more details, and BUILD.md to compile Proton in different platforms.

We also encourage you to join our Timeplus Community Slack to ask questions and meet other active contributors from Timeplus and beyond.

Need help?​

Join our Timeplus Community Slack to connect with Timeplus engineers and other Timeplus Proton users.

For filing bugs, suggesting improvements, or requesting new features, see the open issues here on GitHub.

Licensing​

Proton uses Apache License 2.0. See details in the LICENSE.