38 lines
1.1 KiB
Go
38 lines
1.1 KiB
Go
package kafka
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
"github.com/twmb/franz-go/pkg/kgo"
|
||
|
|
)
|
||
|
|
|
||
|
|
// NewProducerClient builds a producer-only client. Callers own Close().
|
||
|
|
func NewProducerClient(brokers []string) (*kgo.Client, error) {
|
||
|
|
cl, err := kgo.NewClient(
|
||
|
|
kgo.SeedBrokers(brokers...),
|
||
|
|
kgo.ProducerBatchCompression(kgo.SnappyCompression()),
|
||
|
|
)
|
||
|
|
if err != nil {
|
||
|
|
return nil, fmt.Errorf("creating kafka producer client: %w", err)
|
||
|
|
}
|
||
|
|
return cl, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// NewConsumerClient builds a client that consumes the given topics as part
|
||
|
|
// of consumerGroup. The message-plane service relies on Kafka's native
|
||
|
|
// consumer-group rebalancing for partition ownership across replicas
|
||
|
|
// (design.md §9) — offset commit is driven manually via the low-watermark
|
||
|
|
// strategy in design.md §3, so auto-commit is disabled.
|
||
|
|
func NewConsumerClient(brokers []string, consumerGroup string, topics ...string) (*kgo.Client, error) {
|
||
|
|
cl, err := kgo.NewClient(
|
||
|
|
kgo.SeedBrokers(brokers...),
|
||
|
|
kgo.ConsumerGroup(consumerGroup),
|
||
|
|
kgo.ConsumeTopics(topics...),
|
||
|
|
kgo.DisableAutoCommit(),
|
||
|
|
)
|
||
|
|
if err != nil {
|
||
|
|
return nil, fmt.Errorf("creating kafka consumer client: %w", err)
|
||
|
|
}
|
||
|
|
return cl, nil
|
||
|
|
}
|