2017-08-03 291 views

回答

0

我不这么认为,至少使用缺省配置...让我解释一下更好...... 假设你有2个分区对每个话题如此: 登录主题有分区0和1(姑且称之为LIN0, lin1) 注销主题有分区0和1(我们称它们为lout0,lout1)

我们将两个消费者放在同一个消费者组中,它们被称为c1和c2。 对c1使用subscribe()方法可能会发生,它会得到lin0和lout1,而c2可能会得到lin1和lout0。 当生产者写入用户名= u1的登录名(例如)时,它可以在lin0中输入与用户名u1登录相关的消息,并且该消息将被c1消耗。在注销时可能会发生这样的情况,生产者会将用户名= u1的消息写入到由c2处理的lout0! 因此登录由c1处理,但通过c2注销!这就是你想要的当然不想要! 由于subscribe()方法处理自动分区分配和默认分区程序,生产者以循环方式向主题分区分发消息,因此发生此情况。

关于潜在的解决方案可能是编写一个自定义的分区程序在生产者上使用,以便根据一些基于用户名的标准,u1将始终写在分区0的两个主题(so lin0和lout0)。 然后在消费者端使用assign(),因此要求特定的分区,例如c1可以完全从lin0和lout0请求消费者。 当然,您失去了订阅提供的重新平衡功能。