Event streams
An append-only log of events that many readers replay at their own pace.
10 technologies on this page ↓How it works
Producers append records to the end of a log that’s kept for a retention period: hours, days or forever. Reading removes nothing. Each consumer group tracks its own position, called an offset, so a real-time alerting job, a dashboard and a nightly batch can all read the same data independently. Logs are split into partitions for scale, and order is guaranteed within a partition.
A DVR recording of live TV. You can watch live, pause, or rewind to this morning, and your roommate can be at a different point in the same recording.
Reach for it when
- High-volume telemetry, clickstreams and IoT readings
- Several independent consumers of the same events
- Reprocessing history after a bug fix or to build a new view
Think twice when
- Simple job distribution where each task runs once; a queue is simpler
- Low volume, where running a stream platform is more work than it saves
A real example
Thousands of well sensors publish pressure readings to a readings topic. Alerting reads each one within a second, the dashboard updates every few seconds, and the ML team replays the whole week on Sunday to retrain a model.
More on event streams
Narrower ideas that build on this one.
Technologies
Specific products, and what each does differently.
Amazon Kinesis Data StreamsAWSAWS’s serverless event stream, split into shards that each keep records in order.
RedpandaCommercialA Kafka-compatible streaming broker rewritten in C++ as one binary, with no JVM and no ZooKeeper.
WarpStreamCommercialA Kafka-compatible stream that keeps no data on disks: stateless Agents write straight to your object storage bucket.
EstuaryCommercialA managed data-movement platform that captures changes from databases and SaaS sources into collections kept as JSON files in your own bucket, then keeps warehouses and other systems in sync, in real time or on a schedule.Mainly ETL & ELT pipelines Amazon Kinesis Data Streams | Managed service on AWS | Amazon Web Services | Proprietary | 2026-10-05 |
| Open source | Apache Software Foundation | Apache 2.0 (since it was open-sourced in November 2024) | 2026-10-06 | |
| Open source | Apache Software Foundation | Apache 2.0 | 2026-10-05 | |
| Open source | Apache Software Foundation | Apache 2.0 | 2026-10-08 | |
| Commercial product | Cloudflare, Inc. | Proprietary | 2026-10-12 | |
Redpanda | Commercial product | Redpanda Data | BSL 1.1 (each release becomes Apache 2.0 after four years); enterprise features under the Redpanda Community License | 2026-10-05 |
WarpStream | Commercial product | Confluent (an IBM company) | Proprietary (the embedded Bento pipeline engine is MIT) | 2026-10-05 |
| Open source | Nikolay Samokhvalov (open-source project) | Apache 2.0 (includes ISC-licensed PgQ code) | 2026-10-06 | |
Estuary | Commercial product | Estuary Technologies, Inc. | Proprietary hosted service. The Flow runtime source (estuary/flow) is under the Business Source License 1.1 (since November 2020), which converts to Apache 2.0 on its change date (2029-11-20 in the current text) and bans offering it as a data processing service to third parties; only `go/protocols` is also available under Apache 2.0. Most connectors are BSL too, and the Gazette broker underneath is MIT | 2026-10-06 |
Also used for event streams
Products of other kinds that are often used this way, grouped by what they are.
| Pub/sub | Managed service on Google Cloud | Google Cloud | Proprietary | 2026-10-05 |
What each provider calls it
- AWS
- Kinesis Data Streams, MSK (Kafka)
- Google Cloud
- Managed Service for Apache Kafka, Pub/Sub
- Azure
- Event Hubs
- Open source & others
- Apache Kafka, Redpanda (source-available, BSL), Apache Pulsar; WarpStream (Kafka API on object storage); Apache Fluss (streaming storage with updatable tables, for Flink)
See it in a real stack
Architectures that use event streams
In code · python
from kafka import KafkaProducer, KafkaConsumer
producer = KafkaProducer(bootstrap_servers="broker:9092")
producer.send("readings", key=b"well-42", value=b'{"psi": 812.4}')
# Each group_id keeps its own offset in the same log
consumer = KafkaConsumer("readings", group_id="alerts",
bootstrap_servers="broker:9092",
auto_offset_reset="earliest")
for record in consumer:
check_thresholds(record.offset, record.value)Worth exploring
Often confused with
Where it came from2010–2026
Before event streams, companies moved data between systems with one-off pipelines. At LinkedIn around 2010, Jay Kreps recalled, “we built jerry-rigged piping between systems and applications on an as needed basis,” and the complexity meant “the data was always unreliable.” Off-the-shelf brokers such as ActiveMQ were hard to scale, and dumps into Hadoop arrived in batches rather than in real time.
In 2010 LinkedIn decided to build one system for streams of data: Apache Kafka, open-sourced in 2011. The team called it “the global commit log thingy”: an ordered, append-only record that every system could write to and read from at its own pace. Amazon Kinesis offered the same model as a managed cloud service in 2013, and Apache Pulsar, which keeps storage separate from its brokers, became a top-level Apache project in 2018. Retention grew from hours to months, so a stream became a durable record that new systems could replay from the start.
Streams and queues have since converged from both sides: RabbitMQ added streams in 2021, and Kafka made queue-style share groups production-ready in 2026.
Why it’s built this way
- Reading doesn’t delete
- Records stay for a retention period whoever has read them, so a dashboard, an alerting job and a nightly batch can all consume the same data, and a bug fix can be followed by a replay.
- Each consumer keeps its own position
- The log doesn’t track delivery per message, so adding readers is cheap, and a reader can rewind just by moving its offset.
- Partitions for scale, order within each
- Splitting a log across machines lets it grow; promising order only within a partition (one device, one user) avoids a global bottleneck.
- Sequential writes to disk
- Appending to the end of a file is the fastest thing a disk does, which lets a log absorb very high write rates on ordinary hardware.
Timeline
- 2010
LinkedIn starts building Kafka to replace ad hoc pipelines
- 2011
Kafka is open-sourced
- 2013
Amazon Kinesis brings managed streams to the cloud
- 2018
Apache Pulsar becomes a top-level Apache project
- 2020
Kinesis retention can be extended to 365 days
- 2021
RabbitMQ 3.9 adds streams
- 2026
Kafka 4.2 makes queue-style share groups production-ready
- Jay Kreps (Confluent): Putting Apache Kafka to use, a practical guide, part 1 (Feb 2015)
- Kreps, Narkhede, Rao: Kafka, a distributed messaging system for log processing (NetDB 2011 paper) · archived copy, original
- AWS News Blog: Amazon Kinesis, real-time processing of streaming big data (Nov 2013)
- LinkedIn blog: Open-sourcing Kafka, LinkedIn’s distributed message queue (Jan 2011) · archived copy, original
- Apache Incubator: Pulsar project status (graduated September 2018)
- Apache Pulsar docs: Architecture overview (brokers and BookKeeper storage)
- AWS What’s New: Kinesis Data Streams retention of up to one year (Nov 2020)
- RabbitMQ blog: RabbitMQ Streams overview, streams in 3.9 (July 2021)
- Apache Kafka 4.2.0 release announcement (Feb 2026)
Sources13
- Kafka docs: Introduction (partitions, ordering, replication)
- Kafka docs: Design (consumer position, partitions and consumer groups)
- Kafka docs: Broker configs (default retention of 168 hours)
- Kafka docs: Topic configs (retention.ms, -1 for no time limit)
- kafka-python documentation (KafkaProducer, KafkaConsumer)
- AWS docs: Kinesis Data Streams terminology and concepts
- AWS docs: What is Amazon MSK?
- Google Cloud docs: Managed Service for Apache Kafka overview
- Google Cloud docs: What is Pub/Sub?
- Microsoft Learn: What is Azure Event Hubs?
- Redpanda docs: Kafka compatibility
- Apache Pulsar docs: Concepts overview
- WarpStream docs: Architecture