2017-08-28 150 views
0

可以来自不同组的两位消费者从同一主题和分区x中读取并且写入另一个主题和分区y?kafka消费者读取和写入同一分区

我会实施消费者策略,其中一位消费者放弃其他消费者处理的数据。 生产者将数据保存到共享分区的顺序并不重要。

我只是想知道这是否可能

+2

消费者只读和不写。但是,你肯定可以让两位消费者从同一主题中读取,并将他们的结果传递给另一个共同话题的制作人。他们每个人都会读取每条输入记录(所有内容都被读取两次,每个消费者组读取一次,但是您可以实现自定义逻辑,让他们忽略只有其他人才能看到的内容 - 尽管取决于您要跳过多少内容这样两个独立的输入主题或者一个消费者组可以做更好的方式)。 – Thilo

+0

对不起,我的意思是生产者写入主题。 thx帮助 – user817795

+0

如果您希望一位消费者忽略来自第二位消费者的输入,为什么不使用同一组?这将避免你在处理同步时遇到麻烦。 如果你的问题是输入数据是在一个单独的分区(并且你不能改变它),只需使用kafka流(或简单的客户端)将你的数据从你的主题/分区分发到一个新的主题/ 2 *分区,循环方式。那么你可以有效地拥有两个消费者。 – Treziac

回答

1

你可以在这里有两种不同的方法:

  • 消费者在不同的消费群体。这意味着两者都会收到所有消息,并且取决于您的业务逻辑,以便在消费者处理消息时忽略某些消息。
  • 消费者位于同一个消费群组,因此他们将收到不同的分区,并且您拥有消息传递给消费者而不是其他消息。您正在利用Kafka功能,但这取决于如何使用默认循环方式或使用每条消息或自定义分区程序的密钥对数据进行“分区”。

我在第二个解决方案中看到的唯一问题是重新平衡。如果消费者脱机然后回来,重新平衡发生并且分区可能以不同的方式分配。即您开始从分区P1和P2读取消费者C1,并从分区P3和P4读取C2。想象一下,C2离线。首先,如果它离线了更多时间,C1将获得所有分区(我不知道它是否适合您的场景),但是当C2重新联机时,重新平衡发生并且分配的分区可能会不同,即分配了P1和P2到C2(不再是C1),P3和P4到C1(不再是C2);这取决于这种消费者在分区上交换是否是您的应用程序逻辑的问题。

相关问题