一、测试环境
版本:kafka_2.11-0.10.1.0
客户端版本:0.10.1.0
集群节点: 3
Topic名称:test-order-topic
Topic详情:
Topic: test-order-topic PartitionCount:3 ReplicationFactor:2 Configs:
Topic: test-order-topic Partition: 0 Leader: 0 Replicas: 0,1 Isr: 0,1
Topic: test-order-topic Partition: 1 Leader: 1 Replicas: 1,2 Isr: 1,2
Topic: test-order-topic Partition: 2 Leader: 2 Replicas: 2,0 Isr: 2,0
二、Auto Commit 自动提交
消费者关键参数:
enable.auto.commit:true
Max.poll.interval.ms = 60 * 1000 (default = 300000)
Consumer.poll(100)
测试情况:
并发 | 处理阻塞线程 | 消息发送频率 | 阻塞时间 | 消息总数 | 重复消费 | 消息丢失 |
2 | 1 | 10ms | 3min | 20000 | 267 | 不丢失 |
2 | 1 | 10ms | 3min | 20000 | 14 | 不丢失 |
2 | 1 | 10ms | 3min | 20000 | 64 | 不丢失 |
结果:当阻塞时间超过参数Max.poll.interval.ms设置的时间,当前consumer会被移除consumer group;consumer group会rebalance。当阻塞时间到期后,当前consumer会重连broker进行消费。
三、Sync Commit 同步提交
消费者关键参数:
enable.auto.commit:false
Max.poll.interval.ms = 60 * 1000 (default = 300000)
Consumer.poll(100)
测试情况:
并发 | 处理阻塞线程 | 阻塞线程是否继续执行 | 消息发送频率 | 阻塞时间 | 消息总数 | 重复消费 | 消息丢失 |
2 | 1 | 否 | 10ms | 3min | 20000 | 1 | 不丢失 |
2 | 1 | 否 | 10ms | 3min | 20000 | 1 | 不丢失 |
2 | 1 | 否 | 10ms | 3min | 20000 | 1 | 不丢失 |
结果:在sync commit模式下,当阻塞时间超过参数Max.poll.interval.ms设置的时间,阻塞的线程恢复之后会抛出CommitFailedException异常,不会继续消费;需要捕获并处理异常,即可继续消费。
四、Async Commit 异步提交
消费者关键参数:
enable.auto.commit:false
Max.poll.interval.ms = 60 * 1000 (default = 300000)
Consumer.poll(100)
测试情况:
并发 | 处理阻塞线程 | 阻塞线程是否继续执行 | 消息发送频率 | 阻塞时间 | 消息总数 | 重复消费 | 消息丢失 |
2 | 1 | 是 | 10ms | 3min | 20000 | 1 | 不丢失 |
2 | 1 | 是 | 10ms | 3min | 20000 | 1 | 不丢失 |
2 | 1 | 是 | 10ms | 3min | 20000 | 1 | 不丢失 |
结果:在sync commit模式下,当阻塞时间超过参数Max.poll.interval.ms设置的时间,阻塞的线程恢复之后会抛出CommitFailedException异常,会重连继续消费。