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