来自不同组的两个使用者是否可以读取同一主题和分区x,然后写入另一主题和分区y?我将实现一个消费者策略,其中一个消费者丢弃另一个消费者处理的数据。生产者将数据持久化到共享分区的顺序并不重要。我只想知道这是否可行
nafvub8i1#
这里有两种不同的方法:消费者属于不同的消费群体。这意味着两者都将接收所有消息,并且由您的业务逻辑在另一个用户处理消息时忽略某个消息消费者位于同一消费者组中,因此他们将接收不同的分区,并且您将消息传递给消费者a,而不是传递给另一个消费者。您正在利用kafka特性,但这取决于如果使用默认的循环方式或使用每条消息的密钥或自定义分区器,您将如何“分区”数据。我在第二种解决方案中看到的唯一问题是重新平衡。如果一个消费者离线后又回来,就会发生重新平衡,分区可以以不同的方式分布。i、 e.您开始让使用者c1从分区p1和p2读取,c2从分区p3和p4读取。想象c2离线。首先,如果它离线的时间更长,c1会得到所有的分区(我不知道这对你的场景是否有好处),但是当c2恢复在线时,重新平衡就会发生,分配的分区可能会不同,即p1和p2分配给c2(不再是c1),p3和p4分配给c1(不再是c2);这取决于这种在分区上交换的使用者是否是应用程序逻辑的问题。
1条答案
按热度按时间nafvub8i1#
这里有两种不同的方法:
消费者属于不同的消费群体。这意味着两者都将接收所有消息,并且由您的业务逻辑在另一个用户处理消息时忽略某个消息
消费者位于同一消费者组中,因此他们将接收不同的分区,并且您将消息传递给消费者a,而不是传递给另一个消费者。您正在利用kafka特性,但这取决于如果使用默认的循环方式或使用每条消息的密钥或自定义分区器,您将如何“分区”数据。
我在第二种解决方案中看到的唯一问题是重新平衡。如果一个消费者离线后又回来,就会发生重新平衡,分区可以以不同的方式分布。i、 e.您开始让使用者c1从分区p1和p2读取,c2从分区p3和p4读取。想象c2离线。首先,如果它离线的时间更长,c1会得到所有的分区(我不知道这对你的场景是否有好处),但是当c2恢复在线时,重新平衡就会发生,分配的分区可能会不同,即p1和p2分配给c2(不再是c1),p3和p4分配给c1(不再是c2);这取决于这种在分区上交换的使用者是否是应用程序逻辑的问题。