一、遇到问题:Confluent.Kafka.KafkaException: Broker: Specified group generation id is not valid
这个问题很诡异,网卡一直没有找到解决方案。
首先来说,出现这个问题环境。
1.创建一个分了3个区的topic。
2.启动一个生产者。
3.消费者用手动提交偏移量的方式,且拿到队列之后,每个消息处理时间大约20ms。
4.依次启动三个消费者,前面的消费就会报这样的错。
猜测:可能是因为手动提交偏移量,不及时,导致服务器不当知道如何再分配到三个分区上面。
解决:不用手动提交偏移量方式。//c.Commit();
因为即使用了手动提交偏移量的试,并且最后不提交,消费者拿到的偏移量也是会变化到下一个的。查阅资料,这个是消费者与服务器之间的Session连接后,本地会有一个偏移量,会自动变化到下一个。但是消费者如果断开,再次连接,又会从头获取队列。
二、问题:Kafka设置为手动提交偏移量时,消费者不提交偏移量,也会自动拿下一条队列。
此问题是kafka自己的机制问题,导致程序最初的错误设计:当处理消息失败时,不提交偏移量,直接处理消息,这样拿到的也是下一条队列。
解决:不用手动提交偏移量的方式,还是采用自动提交,出错的时候,记录topic和offset。单独出错处理!
三、测试代码,生产者与消费者。
static class Production
{
private