gitee.com/woood2/luca@v1.0.4/test/kafka.md (about) 1 ### single message 2 - 生产单条消息,失去kafka连接,观察投递可靠性 [ pass ] 3 - 生产单条消息,失去kafka连接,随后恢复,观察程序可否自动恢复 [ pass ] 4 - 消费单条消息,正常提交 [ pass ] 5 - 消费单条消息,不提交,重试50min+,观察alarm机制以及是否发生 live lock [ pass ] 6 - 消费单条消息,触发panic [ pass ] 7 8 ### batch message 9 - 生产&消费批量消息,校对数量 [ pass ] 10 - 生产&消费批量消息,切换consumer状态:启动|关闭,观察吞吐量 [ pass ] 11 - 生产&消费批量消息,切换投递模式:none|local|all,观察吞吐量 [ pass ] 12 13 ### offset 14 - 多个consumer group 各具私有offset [ pass ] 15 - 新增consumer group 从最新offset开始消费 [ pass ] 16 - 新增consumer group 从最旧offset开始消费 [ pass ] 17 18 ### instance 19 - 单实例(消费)设置较大partition,观察goroutine数量及稳定性 [ pass ] 20 - 单实例(消费)正常关闭,优雅退出 [ pass ] 21 - 单实例(消费)正常关闭,正在retry消息,优雅退出 [ pass ] 22 - 单实例(消费)重启,从上次未提交的offset开始 [ pass ] 23 - 单实例(消费)失去kafka连接,观察程序表现 [ pass ] 24 - 多实例(消费)新增实例触发rebalance,且处于消息为空状态 [ pass ] 25 - 多实例(消费)新增实例触发rebalance,且处于消息不为空的正常消费状态 [ pass ] 26 - 多实例(消费)新增实例触发rebalance,且处于重试消息状态 [ pass ] 27 - 多实例(消费)关闭实例触发rebalance [ pass ] 28 - 多实例(消费)修改partition数量触发rebalance [ pass ] 29 30 ### 失去kafka连接 31 - producer失去kafka连接:暂时无法投递,等kafka恢复后,又可重新投递 32 - consumer失去kafka连接: 33 1. client.Consume方法立刻退出,err为nil 34 2. 通过loop重新client.Consume,err!=err 35 3. 通过loop循环次数区分如果是address写错,还是lose连接,前者结束进程,后者尝试重新连接 36 37 ### segmentio/kafka-go 生产吞吐量 38 - 启动consumer之后,生产tps明显下降,几乎折半 39 - 分发算法差别不大,RoundRobin 与 LeastBytes 效率接近 40 - 投递可靠性影响巨大,kafka.RequireOne生产2-5q/sec,kafka.RequireNone生产1.3w/sec 41 - 开启batch后影响巨大,kafka.RequireOne,BatchSize:1000,BatchTimeout:100ms,生产10w/2.3sec 42 43 ### sarama 生产吞吐量 44 - 启动/关闭consumer影响巨大 45 - 设置较大的partition,对于生产吞吐量,影响较大 46 - 投递可靠性影响巨大 47 - 并发模型下,生产吞吐量轻易达到 1.3w/sec,性能表现显著优于 segmentio/kafka-go 48 - 详见 greet_test.go