@@ -46,7 +46,7 @@ type KafkaDispatcher struct {
4646 receiver * eventingchannels.MessageReceiver
4747 dispatcher * eventingchannels.MessageDispatcherImpl
4848
49- kafkaAsyncProducer sarama.AsyncProducer
49+ kafkaSyncProducer sarama.SyncProducer
5050 channelSubscriptions map [eventingchannels.ChannelReference ][]types.UID
5151 subsConsumerGroups map [types.UID ]sarama.ConsumerGroup
5252 subscriptions map [types.UID ]Subscription
@@ -86,9 +86,10 @@ func NewDispatcher(ctx context.Context, args *KafkaDispatcherArgs) (*KafkaDispat
8686 conf := sarama .NewConfig ()
8787 conf .Version = sarama .V2_0_0_0
8888 conf .ClientID = args .ClientID
89- conf .Consumer .Return .Errors = true // Returns the errors in ConsumerGroup#Errors() https://godoc.org/github.com/Shopify/sarama#ConsumerGroup
89+ conf .Consumer .Return .Errors = true // Returns the errors in ConsumerGroup#Errors() https://godoc.org/github.com/Shopify/sarama#ConsumerGroup
90+ conf .Producer .Return .Successes = true // Must be enabled for sync producer
9091
91- producer , err := sarama .NewAsyncProducer (args .Brokers , conf )
92+ producer , err := sarama .NewSyncProducer (args .Brokers , conf )
9293 if err != nil {
9394 return nil , fmt .Errorf ("unable to create kafka producer against Kafka bootstrap servers %v : %v" , args .Brokers , err )
9495 }
@@ -99,7 +100,7 @@ func NewDispatcher(ctx context.Context, args *KafkaDispatcherArgs) (*KafkaDispat
99100 channelSubscriptions : make (map [eventingchannels.ChannelReference ][]types.UID ),
100101 subsConsumerGroups : make (map [types.UID ]sarama.ConsumerGroup ),
101102 subscriptions : make (map [types.UID ]Subscription ),
102- kafkaAsyncProducer : producer ,
103+ kafkaSyncProducer : producer ,
103104 logger : args .Logger ,
104105 topicFunc : args .TopicFunc ,
105106 }
@@ -117,8 +118,15 @@ func NewDispatcher(ctx context.Context, args *KafkaDispatcherArgs) (*KafkaDispat
117118
118119 kafkaProducerMessage .Headers = append (kafkaProducerMessage .Headers , serializeTrace (trace .FromContext (ctx ).SpanContext ())... )
119120
120- dispatcher .kafkaAsyncProducer .Input () <- & kafkaProducerMessage
121- return nil
121+ partition , offset , err := dispatcher .kafkaSyncProducer .SendMessage (& kafkaProducerMessage )
122+
123+ if err == nil {
124+ dispatcher .logger .Debugw ("message sent" , zap .Int32 ("partition" , partition ), zap .Int64 ("offset" , offset ))
125+ } else {
126+ dispatcher .logger .Warnw ("message not sent" , zap .Error (err ))
127+ }
128+
129+ return err
122130 },
123131 args .Logger .Desugar (),
124132 eventingchannels .ResolveMessageChannelFromHostHeader (dispatcher .getChannelReferenceFromHost ))
@@ -299,23 +307,6 @@ func (d *KafkaDispatcher) Start(ctx context.Context) error {
299307 return fmt .Errorf ("message receiver is not set" )
300308 }
301309
302- if d .kafkaAsyncProducer == nil {
303- return fmt .Errorf ("kafkaAsyncProducer is not set" )
304- }
305-
306- go func () {
307- for {
308- select {
309- case e := <- d .kafkaAsyncProducer .Errors ():
310- d .logger .Warn ("Got" , zap .Error (e ))
311- case s := <- d .kafkaAsyncProducer .Successes ():
312- d .logger .Info ("Sent" , zap .Any ("success" , s ))
313- case <- ctx .Done ():
314- return
315- }
316- }
317- }()
318-
319310 return d .receiver .Start (ctx )
320311}
321312
0 commit comments