当别人问这个问题的时候,别人肯定是想你是否看过源码。是否针对不同场景改过kafka的分区模式 这是别人最想知道的是,你的message如何负载均衡的发送给topic的partition 我们用kafka的时候,可以动态指定partition,也可以不指定partition 当我们动态指定了partition的时候,kafka会将消息发送到指定的partition 如果没有指定partition 这就是关键了, 如何让这些消息,均衡的发送给每个partition 先看看发送消息的方式 kafka首先判断partition,如果有partition就发送到指定的partition 如果没有,就看有没有key 如果有key就将,key弄成字节,然后用个算法,搞成整数,然后除以partition的个数,最后的余数就是partition的所在 如果partition,和key都没有的时候,源码弄了一个int类型的counter,从0开始,每来一条消息就累加,用counter除以partition的个数的余数就是partition的所在 这样就打到了每个partition的均衡了 【大侠】 ?? 2017/8/25 14:02:17 当然了,我们也可以自己定义partition 某些人用partition指定分区数发消息,如果又有人不指定partition,key,就会发生负责不均衡 你设置了Key,只能保证你自己均衡了 但是要是有其他人指定某个partition发消息呢 【大侠】 ?? 2017/8/25 14:09:14 别个是,1,2,3,4,这是Key的kafka的分的partition,你指定了就变成了1111 【大侠】 ?? 2017/8/25 14:09:40 很多公司,都重写了kafka的分区
时间: 2024-10-09 15:17:00