Kafka Mirror Maker:消费者与消费者的线程编号和生产者编号

时间:2016-11-04 15:34:41

标签: apache-kafka kafka-consumer-api kafka-producer-api apache-kafka-connect

我想清楚地指出一个Mirror Maker的Kafka Parallelism模型。

对于我在消费者方面所理解的内容:

  • 消费者群体是一组消费者。该组的每个消费者都可以阅读一个或多个主题。

  • 该组的消费者可以拥有多个流,即从主题中读取的线程数,最佳做法是让一个线程进行分区。

我的疑问是:我们是否将多线程消费者与单线程消费者或多个线程消费者挂钩?消费者群体是指一组消费者还是一个多线程消费者?

我发现很难从文档中指出这些问题,我想知道我是否错了。

即使在生产者方面,这些考虑因素也是双向的吗?

1 个答案:

答案 0 :(得分:8)

MirrorMaker(MM)中的线程模型如下:

MM部署 N 个线程。

  1. 每个线程实例化并使用一个使用者。这是MM线程和消费者之间的 1:1 映射。
  2. 每个线程共享同一个生产者。这是线程和生产者之间的 N:1 映射。
  3. 因此,您定义为MM的属性的流的数量(由传递给num.streams属性的值给出)对应于MM线程的数量,并且如上所述也是消费者的数量。

    现在,您的具体问题的答案是,此数字还对应于消耗主题和分区记录的线程(或流)总数。

    为什么这种情况在MM中有点令人困惑,因为它让您可以选择使用旧的高级消费者或新的消费者。但在这两种情况下,消耗记录的线程总数为num.streams = N,原因如下:

    1. 当使用旧的消费者高级API时,每个消费者部署消耗记录的线程数由MM硬编码为1个线程。 (您可以通过查看MirrorMaker.scala中传递给createMessageStreamsByFilter方法的参数来确认这一点。由于每个MM线程实例化一个使用者,我们最终会使用消耗记录的 N 个线程。

    2. 如果使用新的消费者API,消费者API不会在消费者API下部署任何线程来消费记录(实例化心跳线程,但这与讨论无关)。因此,这里消耗记录的线程数等于MM线程的数量更直接,因为MM将一个线程映射到它实例化的每个消费者。

    3. 希望这会有所帮助。