super_ar
Where we saw friction with Flink was mainly: 1.) Operational overhead (jobs, state backends, checkpointing) 2.) Generic sinks not being optimized for ClickHouse (batching, small inserts, etc.)
We focused on making scaling a property of the pipeline itself (just add replicas) and optimizing specifically for ClickHouse ingestion patterns.
So Flink is more general, this is more opinionated and focused on this specific use case.
Show HN: 500k+ events/sec transformations for ClickHouse ingestion
https://github.com/glassflow/clickhouse-etl
Hi HN! We are Ashish and Armend, founders of GlassFlow.Over the last year, we worked with teams running high-throughput pipelines into self-hosted ClickHouse. Mostly for observability and real-time analytics.A question that came repeatedly was: What happens when throughput grows?Usually, things work fine at 10k events/sec, but we started seeing backpressure and errors at >100k.When the...
logs/metrics → Vector → ClickHouse
Works well as long as they run simple transformations via Vector. When they start adding things like dedupe, longer time windows, more data volume or joins, things start to break. They actually start using Vector as a stream processing engine.
Very typical issue that I see:
Time window limits: By default vector handles windowing in-memory. So with a higher load, it becomes too heavy to run there.
Missing support: When running in prod env, I have seen teams under pressure because there is no support available (except for Datadog customers). But most people I know run it self-hosted.
Scaling hits ceiling: I keep hearing similar numbers: 250k to 300k rec/sec per instance. Even by adding more resources, things do not scale. The consequences are: backpressure, latency spikes, etc.
At that point, it is no longer a “log pipeline.” It is a streaming system. Just not treated like one.
I wrote a deeper breakdown of this here if anyone’s curious:
https://www.glassflow.dev/blog/when-vector-becomes-your-stre...
Curious how people here are handling this.
Are you still pushing more logic into Vector, or have you split it out elsewhere?
For us, it is more like 5% of the traffic from GEO, but we have been running the company for 2 years and have created a lot of handwritten content for devs.
One of the top questions we received was: “How well does it perform at high throughput?”
We ran a load test and would like to share some results with you.
Summary of the test:
- Tested on 20m records
- Kafka produced 55,000 records/sec
- Processing rate of GlassFlow (deduplication): 9,000+ records/sec
- Measured on a MacBook Pro (M3 Max)
- End-to-end latency: <0.12 ms per request
Here is the blog post with full test results and tried with different parameters (rps, # of publishers, etc.): https://www.glassflow.dev/blog/load-test-glass-flow-for-clic...
It was important to us to set up the testing in a way that everybody could reproduce. Here are the docs: https://docs.glassflow.dev/load-test/setup
We would love to get feedback, especially from folks consuming high-throughput in ClickHouse.
Thanks for reading!
Ashish and Armend (founders)
Load Test GlassFlow for ClickHouse: Real-Time Dedup at Scale
One of the top questions we received was: “How well does it perform at high throughput?”
We ran a load test and would like to share some results with you.
Summary of the test:
- Tested on 20m records
- Kafka produced 55,000 records/sec
- Processing rate of GlassFlow (deduplication): 9,000+ records/sec
- Measured on a MacBook Pro (M3 Max)
- End-to-end latency: <0.12 ms per request
Here is the blog post with full test results and tried with different parameters (rps, # of publishers, etc.): https://www.glassflow.dev/blog/load-test-glass-flow-for-clic...
It was important to us to set up the testing in a way that everybody could reproduce. Here are the docs: https://docs.glassflow.dev/load-test/setup
We would love to get feedback, especially from folks consuming high-throughput in ClickHouse.
Thanks for reading!
Ashish and Armend (founders)
Here 2 more detailed examples:
Real-Time fraud detection in logistics: Let's say you are streaming events from multiple sources (payments, GPS devices, user actions) for a dashboard that should trigger alerts when anomalies happen. Now you have duplicates (retries, partial system failure, etc.). Relying on RMT means incorrect counts until merges happen. This situation can lead to missed fraud, later interventions, etc.
Event collection from multi-systems like CRM + E-commerce + Tracking: Similar user or transaction data can come from multiple systems (e.g., CRM, Shopify, internal event logs). The same action might appear in slightly different formats across streams, causing duplicates in Kafka. ClickHouse can store these, but it doesn't enforce primary keys, so you end up with misleading results until RMT resolves.
ClickHouse doesn't enforce primary keys. It stores whatever you send. ReplacingMergeTree and FINAL are concepts on ClickHouse, but they are not optimal for real-time streams due to the background merging process that needs to be finished to ensure correct query results.
With GlassFlow, you clean the data streams before they hit ClickHouse, ensuring correct query results and less load for ClickHouse.
In your IoT case, a scenario I can imagine is batch replays (you might resend data already ingested). But if you're sure the data is clean and only sent once, you may not need this.
Show HN: GlassFlow – OSS streaming dedup and joins from Kafka to ClickHouse
https://github.com/glassflow/clickhouse-etl
Hi HN! We are Ashish and Armend, founders of GlassFlow. We just launched our open-source streaming ETL that deduplicates and joins Kafka streams before ingesting them to ClickHouse https://github.com/glassflow/clickhouse-etlWhy we built this: Dedup with batch data is straightforward. You load the data into a temporary table. Then, find only the latest versions of the record through hashes or...
Show HN: GlassFlow – OSS streaming dedup and joins from Kafka to ClickHouse
https://github.com/glassflow/clickhouse-etl
Hi HN! We are Ashish and Armend, founders of GlassFlow. We just launched our open-source streaming ETL that deduplicates and joins Kafka streams before ingesting them to ClickHouse https://github.com/glassflow/clickhouse-etlWhy we built this: Dedup with batch data is straightforward. You load the data into a temporary table. Then, find only the latest versions of the record through hashes or...