@hackage shibuya-kafka-adapter0.2.0.0

Kafka adapter for the Shibuya queue processing framework

shibuya-kafka-adapter

Kafka adapter for the Shibuya queue-processing framework.

Integrates with Apache Kafka via kafka-effectful for the consumer effect (polling, offset store, partition pause) and hw-kafka-streamly for error classification (skipNonFatal), on top of hw-kafka-client. Provides polling, offset commit semantics, partition awareness, and graceful shutdown.

Packages

  • shibuya-kafka-adapter — the adapter library (Shibuya.Adapter.Kafka, .Config, .Convert, .Tracing).
  • shibuya-kafka-adapter-bench — micro-benchmarks for the conversion hot path (ConsumerRecordEnvelope, W3C header extraction, timestamps).
  • shibuya-kafka-adapter-jitsurei — runnable examples: BasicConsumer, MultiTopic, MultiPartition, OffsetManagement.

Tracing (opt-in)

Shibuya.Adapter.Kafka.Tracing.traced is an opt-in stream transformer that wraps each emitted Ingested so that the downstream handler's eventual finalize call runs inside a Consumer-kind shibuya.process.message OpenTelemetry span. The span inherits the envelope's W3C traceparent as parent (from Envelope.traceContext) or opens a fresh root span when no parent is present, and is populated with the v1.27 messaging-conventions attributes (messaging.system=kafka, messaging.destination.name, messaging.message.id, and messaging.destination.partition.id when the partition is known). A caller that does not import this module pays nothing — no spans are opened and the adapter's public surface is unchanged.

Typical wiring:

import Shibuya.Adapter.Kafka (kafkaAdapter, defaultConfig)
import Shibuya.Adapter.Kafka.Tracing (traced)
import Shibuya.Telemetry.Effect (runTracing)

runTracing tracer $ do
  Adapter{source} <- kafkaAdapter (defaultConfig [TopicName "orders"])
  Stream.fold Fold.drain
    $ Stream.mapM userHandler
    $ traced (TopicName "orders") source

Building

The repo ships a Nix flake and direnv config for a reproducible toolchain.

direnv allow        # or: nix develop
cabal build all
cabal test shibuya-kafka-adapter

Benchmarks and examples:

cabal bench shibuya-kafka-adapter-bench
cabal run BasicConsumer

Layout

shibuya-kafka-adapter/            library sources and tests
shibuya-kafka-adapter-bench/      tasty-bench micro-benchmarks
shibuya-kafka-adapter-jitsurei/   runnable usage examples
docs/plans/                       execution plans
mori.dhall                        project manifest (mori registry)

License

MIT. See package cabal files for details.