01. KafkaConsumer 订阅topic数据,不通方式的区别

一. KafkaConsumer订阅topic数据的方式可以分为两种

1. 通过subscribe方法订阅,api接口如下:

1.1 public void subscribe(Collection topics);

topics:想订阅相关topic集合

1.2 public void subscribe(Collection topics, ConsumerRebalanceListener listener)

topics:想订阅相关topic集合

listener:当相同group.id下有多个consumer时,会触发topic partition的重新分配,此参数就是重新分配时的回调监听器

举个例子:

例如test topic有两个partition,partition-0和partition-1

当group.id为test_group的consumer消费test topic的数据时,当只有一个consumer时,这个consumer负责消费partition-0和partition-1的数据。

如果此时再有一个group.id为test_group的consumer订阅test topic的数据时,就会触发consumer组的再平衡处理,每一个consumer分别负责消费一个partition的数据。

再平衡重新分配是如何实现的,这个比较复杂,会在后续的文章中通过源码,详细介绍

1.3 public void subscribe(Pattern pattern, ConsumerRebalanceListener listener)

pattern:想订阅相关topic的正则表达式

listener:当相同group.id下有多个consumer时,会触发topic partition的重新分配,此参数就是重新分配时的回调监听器

2. 通过assign方法订阅,api接口如下:

2.1 public void assign(Collection partitions)

partitions:想订阅相关topic的TopicPartition集合

此方法相当于是人为的控制我们想要订阅哪些topic的哪些partition

举个例子:

例如test topic有两个partition,partition-0和partition-1,可以通过下面的方式订阅

TopicPartition tp0 =new TopicPartition("test", 0);

TopicPartition tp1 =new TopicPartition("test", 1);

consumer.assign(Arrays.asList(tp0, tp1));

二 总结

通过上面对KafkaConsumer相关api的详细说明,我们可以得知,这两种方式的区别如下:

当相同group.id下有多个消费者时,subscribe相关api方法会自动触发消费者消费哪些topic partition的再平衡,

相反以assign相关api订阅则不会触发再平衡。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容