Streaming data ingestion delivers data to your analytics platform in near-real-time rather than in scheduled batch windows. Kafka and AWS Kinesis are the dominant streaming platforms — each suited to different architectures and operational contexts. This guide covers the use cases that genuinely require streaming, the trade-offs versus batch ingestion, and the architectural patterns for reliable streaming pipelines.
Streaming data ingestion delivers data to your analytics platform continuously, as events occur, rather than in scheduled batch windows. Apache Kafka and AWS Kinesis are the dominant platforms for high-throughput event streaming — each well-suited to different architectural contexts. Before committing to streaming infrastructure, it is worth being clear about which use cases genuinely require it and which can be served adequately with high-frequency batch.
When Streaming Is Actually Necessary
The case for streaming is often overstated. Many systems that are described as needing "real-time" data actually need data that is a few minutes to an hour fresh — which high-frequency batch (running every 5–15 minutes) can provide without streaming infrastructure complexity.
Streaming is genuinely necessary when:
**Sub-minute freshness requirements** — dashboards showing live operational metrics (active sessions, current order queue, live inventory levels) where minute-old data meaningfully degrades the use case.
**Event-time ordering matters** — you need to process events in the order they occurred, not in the order they arrived. Streaming platforms preserve event time metadata; batch systems typically process by arrival order.
**High-volume event data** — millions of events per minute that cannot be buffered and batch-loaded without latency that violates freshness requirements. Clickstream data, IoT sensor data, financial tick data.
**Stream processing** — aggregations, joins, and transformations applied to event streams before landing in the analytics store. Window functions (last 5 minutes of events), pattern detection, and real-time feature computation require processing the stream, not just ingesting it.
For most analytics use cases — daily dashboards, weekly reports, operational analytics that tolerate 15-minute latency — batch ingestion is simpler, cheaper, and more reliable.
Apache Kafka
Kafka is a distributed event streaming platform designed for high-throughput, fault-tolerant, ordered event streams. It operates as a distributed log: events are written to topics, partitioned for parallel processing, and retained for a configured period. Consumers read from topics at their own pace without affecting the log or other consumers.
Core Kafka concepts:
**Topic** — a named stream of events. All events of a given type (page views, order placements, payment attempts) flow through a topic.
**Partition** — a topic is split into partitions for parallelism. Within a partition, events are strictly ordered. Across partitions, order is not guaranteed. Partition count determines the maximum consumer parallelism.
**Producer** — a process that writes events to a topic.
**Consumer group** — a set of consumers that collectively read a topic's partitions. Each partition is assigned to one consumer in the group; adding consumers increases parallelism.
**Retention** — Kafka retains events for a configured period (default 7 days). Consumers that fall behind can replay events; events older than the retention period are deleted.
Use cases for Kafka:
- High-throughput event ingestion (millions of events/second)
- Event replay and reprocessing
- Fan-out: multiple consumers processing the same events independently
- Stream processing (Kafka Streams, Apache Flink consuming from Kafka)
- Microservice event bus
**Kafka managed services:** Confluent Cloud, MSK (AWS Managed Streaming for Apache Kafka), Aiven Kafka — eliminate the operational complexity of running Kafka clusters.
AWS Kinesis
AWS Kinesis is Amazon's managed streaming service. It provides four products:
**Kinesis Data Streams** — the low-level streaming primitive, similar to Kafka topics. Data is written to streams composed of shards; each shard handles 1MB/s write or 1000 records/s. Consumers read from shards using the Kinesis API or Kinesis Client Library.
**Kinesis Data Firehose** — a managed loading service that buffers stream data and delivers batches to S3, Redshift, OpenSearch, or Splunk. Firehose abstracts the consumer management; you configure a delivery stream and Firehose handles batching, compression, and retry.
**Kinesis Data Analytics** — SQL-based stream processing on Kinesis streams, with Apache Flink as the underlying engine.
**MSK (Managed Streaming for Apache Kafka)** — managed Kafka as an AWS service, bridging the Kafka ecosystem with AWS infrastructure.
When to choose Kinesis over Kafka:
- Primarily AWS workloads: native IAM integration, direct connections to Redshift and S3
- Simpler operational model: shards are the scaling unit, not broker clusters
- Firehose use case: want managed delivery to S3/Redshift without building a consumer
When to choose Kafka over Kinesis:
- Cross-cloud or cloud-agnostic requirements
- Longer retention requirements (Kafka can retain weeks; Kinesis max 7 days)
- More complex consumer requirements (consumer groups, offset management)
- Existing Kafka expertise
Streaming to Analytics Stores
Getting data from Kafka or Kinesis to a queryable analytics store involves:
**Direct warehouse connectors** — Kafka Connect (for Kafka) and Kinesis Firehose (for Kinesis) can deliver events directly to data warehouse landing tables. Kafka Connect has connectors for Snowflake, BigQuery, and Redshift; Firehose delivers natively to Redshift and S3.
**S3 landing + batch loading** — events are written to S3 (by Kafka Connect S3 sink or Kinesis Firehose), and a scheduled job (dbt, Airflow) batch-loads from S3 to the warehouse. This hybrid approach delivers near-real-time landing (minutes to S3) with batch warehouse loading, balancing freshness and operational simplicity.
**Stream processing before landing** — Flink, Spark Streaming, or Kafka Streams pre-aggregates events before writing to the warehouse. Landing pre-aggregated records reduces warehouse storage and query cost at the expense of pre-aggregation logic that must be maintained.
Operational Complexity
Streaming infrastructure is significantly more complex to operate than batch pipelines:
**Backpressure management** — if consumers cannot keep up with producers, the stream buffers. Unbounded buffering risks resource exhaustion; bounded buffering with backpressure requires producers to slow down or shed load.
**Consumer lag monitoring** — consumer lag (the gap between the newest event and the last event a consumer has processed) is the primary operational health metric. High consumer lag indicates either a slow consumer or a production spike. Alert on consumer lag exceeding threshold.
**Exactly-once semantics** — ensuring each event is processed exactly once (not at-most-once or at-least-once) requires careful configuration of both the producer and consumer. Kafka's transactions and idempotent producers, combined with transactional consumer commits, enable exactly-once; Kinesis's at-least-once delivery requires idempotent consumers to achieve effectively-once.
Our data architecture practice designs streaming and batch data ingestion architectures for enterprise data teams — contact us to discuss your data ingestion strategy.
A former Microsoft data architect audits your data foundation, identifies your top priorities, and sends you a written plan. Free. No pitch.
Book a Call →