从输出看,三个线程各自处理自己分配的分区数据,pool-1-thread-1 ->partition 0,pool-1-thread-2 ->partition 1,pool-1-thread-3 -> partition 2。
各位可以去尝试将MultiKafkaConsumerDemo类中的消费者线程数改为4,可以看到有个线程不能消费到数据;如果将线程数改为2,可以看到一个线程消费了两个分区的数据,另一个线程消费了一个分区的数据。这是因为kafka是以分区作为并发单元的。
如果要增加消费速度,一方面可以考虑通过增加分区数,进而增加拉取线程的数量;另一方面可以通过缓存机制将消息拉取和消息处理解耦,这样则可以自定义处理线程数量,从而增加吞吐量。
此外如果要严格保证有且仅有一次的消费语义,可以通过保存offset到外部存储去实现,如保存到zookeeper或者mysql等。
kafka知识体系51-消费者编程实践 (4)
内容版权声明:除非注明,否则皆为本站原创文章。