# franz
[](https://hex.pm/packages/franz)
[](https://hexdocs.pm/franz/)
`franz` is a Gleam library for interacting with Kafka. It provides functionalities to produce and consume messages, handle topics, and manage configurations.
## Installation
Add `franz` to your Gleam project:
```sh
gleam add franz
```
## Usage
```gleam
import franz
import franz/consumer_config
import franz/group_config
import franz/group_subscriber
import franz/message_type
import franz/partitions
import franz/producer
import franz/topic_subscriber
import gleam/io
pub fn main() {
let topic = "gleamy_topic"
let endpoint = #("localhost", 9092)
let assert Ok(connection) =
franz.new_client([endpoint])
|> franz.with_config(franz.AutoStartProducers(True))
|> franz.start()
//let assert Ok(Nil) = franz.create_topic([endpoint], topic, 1, 1)
let assert Ok(Nil) =
producer.produce_sync(
connection,
topic,
producer.Partitioner(producer.Random),
<<"gracias">>,
producer.Value(<<"bitte">>, [#("meta", "data")]),
)
let counter = 0
let assert Ok(_pid) =
group_subscriber.new(
connection,
"group",
[topic],
message_type.Message,
fn(message, counter) {
io.debug(message)
io.debug(counter)
group_subscriber.commit(counter + 1)
},
counter,
)
|> group_subscriber.with_group_config(
group_config.OffsetCommitIntervalSeconds(10),
)
|> group_subscriber.with_consumer_config(consumer_config.BeginOffset(
consumer_config.Earliest,
))
|> group_subscriber.start()
let assert Ok(_pid) =
topic_subscriber.new(
connection,
topic,
partitions.All,
message_type.Message,
fn(_, message, state) {
io.debug(message)
topic_subscriber.ack(state)
},
Nil,
)
|> topic_subscriber.with_config(consumer_config.BeginOffset(
consumer_config.Earliest,
))
|> topic_subscriber.start()
}
```