高吞吐的kafka如何保证消息消费的有序性

producer端发送的message必须指定是发送到哪个topic,但是不需要指定topic下的哪个partition,因为kafka会把收到的message进行load balance,均匀的分布在这个topic下的不同的partition上( hash(message) % [broker数量]  )。

 

同组有多个消费者的时候:kafka会按照顺序分配partitions,eg如果有3个消费者

partitions assigned: [abcd-2, abcd-3, abcd-0, abcd-1]

partitions assigned: [abcd-6, abcd-4, abcd-5]

partitions assigned: [abcd-7, abcd-8, abcd-9]

 

当同一个key的消息会被分配到同一个partition中。消息在同一个partition处理的顺序是FIFO,这就保证了消息的顺序性。partition上不允许并发当消费者数量大于>partition时候,多余的消费者会闲置不起作用

如果要保证消息有序性,需要指定和保证key的有序性,根据key的规则分片partition

你可能感兴趣的:(大数据)