apache/flink

Data

A streaming-first processing engine for teams that need stateful, event-time computation over continuous data with exactly-once semantics.

26,424
14,075
Java
Apache-2.0
12 years old

Flink is worth adopting when your problem really is continuous, stateful processing over unbounded data, and you are prepared to run a distributed system. It is not a lightweight library you add to an existing batch job.

The problem

You have events arriving continuously — clicks, sensor readings, transactions — and you want rolling aggregates, session windows, or joins across streams that stay correct when events arrive late or out of order. Doing this with cron jobs and batch queries means re-scanning data, hand-rolling state, and accepting stale or duplicated results. Flink changes that step: you write a job against a stream, it maintains state and emits results as data flows. The result is a long-running pipeline that produces windowed or joined output continuously rather than on a schedule.

What's different

The core mechanism is a streaming-first runtime that treats batch as a bounded streaming case. The DataStream API supports event time and out-of-order processing under the Dataflow model, and windowing can be driven by time, count, sessions or custom triggers. State and exactly-once processing are handled by the runtime, so the job can recover and continue without you building idempotency into every downstream sink yourself.

The practical benefit is that the same program shape covers streaming and batch jobs — the batch example in the README just sets RuntimeExecutionMode.BATCH on the same StreamExecutionEnvironment. The trade-off is operational weight: Flink is a cluster system, not an embedded processing loop. Its connectors are largely externalized into separate repositories, so the Kafka, JDBC or connector work you need may live outside the main repo and version in step with Flink releases.

Who should try it

Good fit: a team with high-volume, high-velocity event data that needs windowed aggregation, event-time correctness, or stateful joins, and that already runs distributed infrastructure it can extend with a Flink cluster. A batch job over bounded files is also viable through the same API if you want one programming model.

Poor fit: a single-machine analysis over a dataset that fits comfortably on one node. The historical Hacker News thread contains exactly that argument — commenters on 2019-01-30 said such distributed streaming stacks are often overused and that single-machine processing can handle large datasets with careful memory use. That is an opinion from 2019, not a verdict on today's Flink, but it correctly points at the class of user who should not start here.

Requirements and limitations

Building from source requires a Unix-like environment (Linux, macOS, Cygwin or WSL), Git, unzip, Maven 3.9.16 via the wrapper, and Java 11, 17 or 21; the build takes roughly ten minutes with tests skipped. Development is documented around IntelliJ IDEA, and the README explicitly says the Eclipse Scala IDE setup does not work with Flink — an Eclipse-based team should plan for a different workflow.

The ongoing constraint is operational: a Flink deployment adds a cluster to run, monitor and upgrade, and connectors you depend on are maintained in separate Apache repositories. Check the project documentation and the contribution/build guide before committing. The repo is Apache-2.0 licensed and the README points contributors to how to contribute.

HotRepo's take

HotRepo's tracking is too thin to judge persistence: only two daily-board dates (2026-10-24 and 2026-10-25) were recorded, with +1 and +2 stars, alongside a Java monthly board showing +93 stars at #16 on 2026-10-25. Those dated snapshots show continuing visibility but cannot establish a trend. The decision should rest on whether you need a cluster-scale stream processor, not on trending movement; verify connector versions against your Flink release before planning.

Hacker News

Apache Flink
▲ 115 · 58 comments · January 28, 2019

Written by AI from the project's README, updated October 25, 2026. The project's own docs are the source of truth.