hw-kafka-client-2.0.0: example/ProducerExample.hs
{-# LANGUAGE OverloadedStrings #-}
module ProducerExample
where
import Control.Monad (forM_)
import Data.ByteString (ByteString)
import Data.Monoid
import Kafka.Producer
-- Global producer properties
producerProps :: ProducerProperties
producerProps = brokersList [BrokerAddress "localhost:9092"]
<> logLevel KafkaLogDebug
-- Topic to send messages to
targetTopic :: TopicName
targetTopic = TopicName "kafka-client-example-topic"
mkMessage :: Maybe ByteString -> Maybe ByteString -> ProducerRecord
mkMessage k v = ProducerRecord
{ prTopic = targetTopic
, prPartition = UnassignedPartition
, prKey = k
, prValue = v
}
-- Run an example
runProducerExample :: IO ()
runProducerExample = do
res <- runProducer producerProps sendMessages
print res
sendMessages :: KafkaProducer -> IO (Either KafkaError ())
sendMessages prod = do
err1 <- produceMessage prod (mkMessage Nothing (Just "test from producer") )
forM_ err1 print
err2 <- produceMessage prod (mkMessage (Just "key") (Just "test from producer (with key)"))
forM_ err2 print
errs <- produceMessageBatch prod
[ mkMessage (Just "b-1") (Just "batch-1")
, mkMessage (Just "b-2") (Just "batch-2")
, mkMessage Nothing (Just "batch-3")
]
forM_ errs (print . snd)
return $ Right ()