我想清楚地指出一个Mirror Maker的Kafka Parallelism模型。
对于我在消费者方面所理解的内容:
消费者群体是一组消费者。该组的每个消费者都可以阅读一个或多个主题。
该组的消费者可以拥有多个流,即从主题中读取的线程数,最佳做法是让一个线程进行分区。
我的疑问是:我们是否将多线程消费者与单线程消费者或多个线程消费者挂钩?消费者群体是指一组消费者还是一个多线程消费者?
我发现很难从文档中指出这些问题,我想知道我是否错了。
即使在生产者方面,这些考虑因素也是双向的吗?
答案 0 :(得分:8)
MirrorMaker(MM)中的线程模型如下:
MM部署 N 个线程。
因此,您定义为MM的属性的流的数量(由传递给num.streams
属性的值给出)对应于MM线程的数量,并且如上所述也是消费者的数量。
现在,您的具体问题的答案是,此数字还对应于消耗主题和分区记录的线程(或流)总数。
为什么这种情况在MM中有点令人困惑,因为它让您可以选择使用旧的高级消费者或新的消费者。但在这两种情况下,消耗记录的线程总数为num.streams = N
,原因如下:
当使用旧的消费者高级API时,每个消费者部署消耗记录的线程数由MM硬编码为1个线程。 (您可以通过查看MirrorMaker.scala中传递给createMessageStreamsByFilter
方法的参数来确认这一点。由于每个MM线程实例化一个使用者,我们最终会使用消耗记录的 N 个线程。
如果使用新的消费者API,消费者API不会在消费者API下部署任何线程来消费记录(实例化心跳线程,但这与讨论无关)。因此,这里消耗记录的线程数等于MM线程的数量更直接,因为MM将一个线程映射到它实例化的每个消费者。
希望这会有所帮助。