UberExplainer
Introducing uFowarder: The Consumer Proxy for Kafka Async Queuing
Summary
Uber introduces uForwarder, an open-source Consumer Proxy for Kafka Async Queue workloads, after deploying a push-based system across more than 1,000 consumer services. The proxy fetches messages through Kafka’s binary protocol, sends them individually to consumer services over gRPC, collects status codes and processing results, and commits offsets when safe. Production challenges included head-of-line blocking from messages that fail before reaching handlers, growing hardware costs, external data sources that are not ready when events arrive, and requirements for production/non-production and zone isolation. The implemented solutions include context-aware routing through message and gRPC headers, active blocking detection and mitigation, hardware-efficiency improvements, and DelayProcessManager, which pauses only delayed partitions and guarantees at-least delay rather than exact timing. The project is open source, with planned work on consumer-lag handling and direct Protobuf support.
Context
uForwarder was developed to address partition scalability, head-of-line blocking, programming-language support, hardware efficiency, delayed upstream data, and message-isolation requirements that emerged as more services adopted the Consumer Proxy.
Approach / What changed
The Consumer Proxy fetches Kafka messages using Kafka’s binary protocol, dispatches them individually over gRPC, aggregates processing results, and commits offsets when safe. uForwarder adds context-aware routing, active head-of-line blocking detection and mitigation, hardware-efficiency improvements, and DelayProcessManager for partition-level delayed delivery.
Takeaways
The Consumer Proxy hides Kafka consumer-management complexity behind a gRPC interface and commits offsets after aggregating consumer-service processing results.
Context-aware routing carries subsetting context from Kafka message headers into gRPC request headers, allowing load balancers to isolate production/non-production and zone traffic without splitting topics.
DelayProcessManager pauses only partitions whose first unprocessed message has not met its delay, buffers polled messages, and provides an at-least delay rather than an exact delay.
Source and freshness
- Source
- uber.com
- Published
- Added to Yomu
Summaries are generated from the original by a language model. Check the original before relying on it.
Keep reading
Related reading
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.
The best engineering reads, once a week
One useful email. Unsubscribe anytime.