package kafka import ( "context" "github.com/IBM/sarama" "go.opentelemetry.io/otel" otelcodes "go.opentelemetry.io/otel/codes" ) func NewProducer() *Producer { return &Producer{} } type Producer struct { } func (c *Producer) Produce(ctx context.Context, topic, value string) { msg := &sarama.ProducerMessage{ Topic: topic, Value: sarama.StringEncoder(value), Headers: NewCarrier().Inject(ctx), } client.producer.Input() <- msg } func producerError() { for err := range client.producer.Errors() { ctx := NewCarrier().ExtractProducer(err.Msg.Headers) _, span := otel.Tracer(client.serverName).Start(ctx, "kafka.producer") span.SetStatus(otelcodes.Error, err.Error()) span.End() } }