对consumer instance(消费者实例)的思考

来源:互联网 发布:网络直播间策划方案 编辑:程序博客网 时间:2024/06/14 22:36

官网(https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html#plugins-inputs-kafka-consumer_threads)说的要consumer instance,也就是消费者实例,到底是指什么?是指一个logstash进程,还是指logstash中的consumer_threads中的线程数,几个consumer_threads就代表几个消费者实例?如果是后者的话,那在一台机器起多个logstash进程怎么算?我不知道大家是否跟我有一样的疑问?为了回答我自己的疑问,我自己试了一下

测试条件:Kafka集群部署在137/138/139 三台机器上,logstash 部署在另外一台机器91上

Round-1:
Logstash进程数为1,每个logstash的consumer_threads 为1
这里写图片描述

启动一个logstash进程之后,观察进程数,如下:
这里写图片描述

对应的这里写图片描述

Round-2:
Logstash进程数为3,每个logstash的consumer_threads 为1
启动三个logstash进程之后,观察进程数,如下:
这里写图片描述

对应的:
这里写图片描述

本例中,当logstash进程数为3时,实质上6个partition只被分别绑定在2个consumer上。也就是说3个logstash进程,只有两个被当成了consumer,还有一个应该是空闲的。

Round-3:
修改logstash的配置,设为consumer_threads=>6。
这里写图片描述

只起一个logstash进程,
这里写图片描述

对应的,发现有6个不同的consumer instance,即6个不同的消费者实例。如下:
这里写图片描述

可以得到下面几点:
1) 当consumer_theards=1的时候,一个logstash进程就是一个consumer instance;理论上,可以在一台机器上起多个logstash进程,至于有几个consumer(一个logstash进程就是一个consumer)被绑定到partition,这是随机事件,有可能只有一个consumer被绑定,其余的consumer都处于空闲状态。
2) 当consumer_threads=n (n>1)时,若起一个logstash进程,那就意味着有n个consumer。
3) 笔者试过(http://blog.csdn.net/nyyjs/article/details/72770595),在三台机器上分别起一个logstash,每个logstash的consumer_threads设为2,然后取消费6个partiton。即6个不同的consumer去消费6个partition,结果也达到目的。很好的保证了一个partition被一个consumer消费,出现partiton数目和consumer数目不对等的情况出现。
4) 同一个logstash进程,其前缀都一样,前缀一样的情况下,不同的后缀表示该进程下的consumer thread数目。如最后一个例子,前缀都是”***b766”,表示只有一个这样的logstash进程,最后的序号0-5表示6个不同的线程数,也就是我们在配置中设置的consumer_threads=>6

阅读全文
0 0
原创粉丝点击