packages feed

hw-kafka-conduit-2.1.0: example/Main.hs

{-# LANGUAGE OverloadedStrings #-}
module Main where

import           Control.Monad        (forM_)
import           Data.Conduit
import qualified Data.Conduit.List    as L
import           Data.Monoid          ((<>))
import           Kafka.Conduit.Sink   as KSnk
import           Kafka.Conduit.Source as KSrc

kafkaBroker :: BrokerAddress
kafkaBroker = BrokerAddress "localhost:9092"

-- Topic to write to and read from
testTopic :: TopicName
testTopic = TopicName "kafka-client-conduit-example-topic"

-- Global consumer properties
consumerProps :: ConsumerProperties
consumerProps = KSrc.brokersList [kafkaBroker]
             <> groupId (ConsumerGroupId "consumer_conduit_example_group")
             <> noAutoCommit

-- Subscription to topics
consumerSub :: Subscription
consumerSub = topics [testTopic]
           <> offsetReset Earliest

-- Global producer properties
producerProps :: ProducerProperties
producerProps = KSnk.brokersList [kafkaBroker]

main :: IO ()
main = do
  putStrLn "Running sink..."
  producerRes <- runConduitRes outputStream
  forM_ producerRes print
  putStrLn "Running source..."
  msgs <- runConduitRes $ inputStream .| L.take 10
  forM_ msgs print
  putStrLn "Ok."

inputStream =
  kafkaSource consumerProps consumerSub (Timeout 1000)

outputStream =
  L.sourceList ["c-one", "c-two", "c-three"]
  .| L.map ((ProducerRecord testTopic UnassignedPartition Nothing) . Just)
  .| kafkaSink producerProps