tx7do / kratos-transport

kratos transport layer extension
MIT License
340 stars 92 forks source link

fix kafka subscriber EOF log when closing program #96

Closed dgqypl closed 2 months ago

dgqypl commented 2 months ago

当 kafka consumer 程序关闭时会报大量的 EOF 日志,相关 issue:https://github.com/tx7do/kratos-transport/issues/69#issuecomment-1862662298

看了下 kafka-go v0.4.47 ReaderFetchMessage() 方法: https://github.com/segmentio/kafka-go/blob/2af3101bdba0698ff97117cd2b0051510d996df7/reader.go#L833-L836r.msgs 这个 channel 被 close,会返回 io.EOF

close 的调用处见:https://github.com/segmentio/kafka-go/blob/2af3101bdba0698ff97117cd2b0051510d996df7/reader.go#L291-L292

而在本项目调用 FetchMessage(),只判断了 err != nil,然后 continue: https://github.com/tx7do/kratos-transport/blob/da29a30232e7274f4a7943584a3ae0975e3ae07d/broker/kafka/kafka.go#L614-L618

结合 kafka-go 源码的返回,这里是不是可以加一个判断,当 err is io.EOF 时,说明 r.msgs 被 close 了,从而 return 退出循环。这样就不会报大量的 EOF 日志了。