
Kafka Cronsumer is mainly used for retry/exception strategy management. It works based on cron expression and consumes messages in a timely manner with the power of auto pause and concurrency.
For details check our blog post

go get github.com/Trendyol/kafka-cronsumer@latest
You can find a number of ready-to-run examples at this directory.
After running docker-compose up command, you can run any application you want.
Don't forget its cron based :)
func main() {
// ...
var consumeFn kafka.ConsumeFn = func (message kafka.Message) error {
fmt.Printf("consumer > Message received: %s\n", string(message.Value))
return nil
}
c := cronsumer.New(kafkaConfig, consumeFn)
c.Run()
}
func main() {
// ...
var consumeFn kafka.ConsumeFn = func (message kafka.Message) error {
fmt.Printf("consumer > Message received: %s\n", string(message.Value))
return errors.New("error occurred")
}
c := cronsumer.New(kafkaConfig, consumeFn)
c.Run()
}
func main() {
// ...
var firstConsumerFn kafka.ConsumeFn = func (message kafka.Message) error {
fmt.Printf("First consumer > Message received: %s\n", string(message.Value))
return nil
}
first := cronsumer.New(firstCfg, firstConsumerFn)
first.Start()
var secondConsumerFn kafka.ConsumeFn = func (message kafka.Message) error {
fmt.Printf("Second consumer > Message received: %s\n", string(message.Value))
return nil
}
second := cronsumer.New(secondCfg, secondConsumerFn)
second.Start()
// ...
}
func main() {
// ...
var consumeFn kafka.ConsumeFn = func(message kafka.Message) error {
return errors.New("err occurred")
}
c := cronsumer.New(config, consumeFn)
StartAPI(*config, c.GetMetricCollectors()...)
c.Start()
// ...
}
func StartAPI(cfg kafka.Config, metricCollectors ...prometheus.Collector) {
// ...
f := fiber.New(
fiber.Config{},
)
metricMiddleware, err := NewMetricMiddleware(cfg, f, metricCollectors...)
f.Use(metricMiddleware)
// ...
}
| config | description | default | example |
|---|---|---|---|
logLevel |
Describes log level, valid options are debug, info, warn, and error |
info | |
metricPrefix |
MetricPrefix is used for prometheus fq name prefix. If not provided, default metric prefix value is kafka_cronsumer. Currently, there are two exposed prometheus metrics. retried_messages_total_current and discarded_messages_total_current. So, if default metric prefix used, metrics names are kafka_cronsumer_retried_messages_total_current and kafka_cronsumer_discarded_messages_total_current |
kafka_cronsumer | |
consumer.clientId |
see doc | ||
consumer.cron |
Cron expression when exception consumer starts to work at | */1 * * * * | |
consumer.backOffStrategy |
Define consumer backoff strategy for retry topics | fixed | exponential, linear |
consumer.duration |
Work duration exception consumer actively consuming messages | NonStopWork (zero duration) | 20s, 15m, 1h, NonStopWork (zero duration) |
consumer.brokers |
broker address | ||
consumer.topic |
Exception topic names | exception-topic | |
consumer.groupId |
Exception consumer group id | exception-consumer-group | |
consumer.maxRetry |
Maximum retry value for attempting to retry a message | 3 | |
consumer.concurrency |
Number of goroutines used at listeners | 1 | |
consumer.minBytes |
see doc | 1 | |
consumer.maxBytes |
see doc | 1 MB | |
consumer.maxWait |
see doc | 10s | |
consumer.commitInterval |
see doc | 1s | |
consumer.heartbeatInterval |
see doc | 3s | |
consumer.sessionTimeout |
see doc | 30s | |
consumer.rebalanceTimeout |
see doc | 30s | |
consumer.startOffset |
see doc |
$ claude mcp add kafka-cronsumer \
-- python -m otcore.mcp_server <graph>