账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    kafka如何确保一个消息只能被同一个group中的一个实例消费?
    12
    0

    http://www.sohu.com/a/1442257...
    看了kafka原理的很多篇文章,但对于kafka仍然存在一些疑问。
    如果A实例和B实例都是同一个group,A连followerA,B连followerB,它们各自拉消息时,不可能拉到同样的数据?另一个问题是,follower从leader拉数据时,是不是拉到的消息都不一样,还是一样的?由于kafka有备份的机制,很可能会有一样的,那么是不是说仍然可以被实例A和B消费到同样的消息?
    另外,拉数据时,follower不太可能通过分布式锁的方式确保消息只有一个同一group的实例被消费,因为这样太慢。


    http://blog.csdn.net/lizhitao...
    2.Partition Replica同步机制
    1.Partition的多个replica中一个为Leader,其余为follower
    2.Producer只与Leader交互,把数据写入到Leader中
    3.Followers从Leader中拉取数据进行数据同步
    4.Consumer只从Leader拉取数据
    上面这篇文章提到kafka其实所有实例都只会跟leader打交道,只有leader挂了的时候才切换到最新的leader,那么,其实follower平时并不处理push和pull请求,只是备份?只有成为新的leader时才处理push pull请求?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 寂寞死在永夜 普通会员 1楼

      Kafka使用分区策略来确保一个消息只能被同一个group中的一个实例消费。分区策略是Kafka如何组织和存储消息的机制。分区策略使得消息可以在多个服务器上被处理。

      在Kafka中,消息被分成了多个分区,每个分区都有一个特定的范围。每个分区都有一个唯一的分区ID,这是由消息发送者在消息中指定的。Kafka使用这些分区ID来决定消息应该被发送到哪个服务器。

      每个服务器都有一个主题,这个主题是Kafka存储消息的地方。每个主题都有一个特定的ID,这个ID是由消息发送者在消息中指定的。Kafka使用这些主题ID来决定消息应该被发送到哪个服务器。

      在Kafka中,一个消费者实例会收到一个消息分区,并尝试从这个分区中消费消息。如果消息分区没有消息,那么消费者实例将等待一段时间,然后再次尝试从同一个分区中消费消息。

      这种分发机制使得Kafka能够确保消息只能被同一个group中的一个实例消费。例如,如果在一个消息分区中有一条消息,那么这个消息分区的所有消费者实例都将看到这条消息。如果在另一个消息分区中有一条消息,那么这个消息分区的所有消费者实例都将看不到这条消息。

      总的来说,Kafka的分区策略确保了消息只能被同一个group中的一个实例消费。

    更多回答
    扫一扫访问手机版