An Apache Kafka checker for InVisionApp go-health.
The Apache Kafka checker implements a simple roundtrip check that sends a random message to a specific topic and checks that the message is received within the time specified in the configuration.
go get github.com/3rs4lg4d0/go-kafka-checker// Create a new health instance.
h := health.New()
// Create a kafka check skipping the first three consumer timeouts (as maximum) if any.
kafkaCheck, err := kafka.NewKafka(kafka.KafkaConfig{
BootstrapServers: "localhost:19092",
SkipConsumerTimeouts: 3,
})You have a complete example here.
You can configure the checker using the KafkaConfig struct.
type KafkaConfig struct {
BootstrapServers string
Topic string
PollTimeout time.Duration
CheckTimeout time.Duration
SkipConsumerTimeouts int
ConsumerConfig map[string]any
ProducerConfig map[string]any
}| Property | Type | Default value | Description |
|---|---|---|---|
| BootstrapServers | string | - | Coma separated list of kafka brokers. This property is mandatory. |
| Topic | string | health-checks | Topic to connect to (make sure it exists). |
| PollTimeout | time.Duration | 200 ms | The maximum time spent fetching data from the topic. |
| CheckTimeout | time.Duration | 1000 ms | The maximum time to wait for the check to complete. |
| SkipConsumerTimeouts | int | 0 | Maximum number of check timeouts to skip at the beginning when consuming messages. |
| ConsumerConfig | map[string]any | 0 | Consumer configuration (see librdkafka/CONFIGURATION.md). |
| ProducerConfig | map[string]any | 0 | Producer configuration (see librdkafka/CONFIGURATION.md). |
SkipConsumerTimeouts can be a useful property to avoid some unhealthy results because joining to a consumer group and receiving a partition assignment can take some time. So if you provide a value for this property greater than zero, for the first n checks (as maximum), if any timeout happens when consuming messages, you will see an output like this:
{
"details": {
"kafka-check": {
"name": "kafka-check",
"status": "ok",
"fatal": true,
"details": {
"info": "skipped check timeout (2 remaining)"
},
"check_time": "2023-10-17T00:48:57.51717+02:00",
"num_failures": 0,
"first_failure_at": "0001-01-01T00:00:00Z"
}
},
"status": "ok"
}If another type of error happens during the first checks (e.g. a Kafka error), even if you set this property to a value greater than zero, SkipConsumerTimeouts is internally set to zero. This also happens as soon as a check completes successfully.
With ConsumerConfig and ProducerConfig you can provide specific configuration (e.g. security) but the following properties will be ignored (because they are internally set by the Kafka checker):
- bootstrap.servers
- group.id
- auto.offset.reset