offset是什么?
每一条消息在进入partition的时候都会为其分配一个编号,这个编号被称为offset,offset是一个64位long类型的,是递增的,在partition中,offset是唯一存在的,kafka能够保证在同一个partition中消息是有序的
offset维护在哪里?
kafka提供了一个__consumer_offsets的一个Topic,offset信息会写入到这个topic中,__consumer_offsets默认有50个分区。
维护offset是以groupid来划分的,根据groupid,把不同group的offset放入各自对应的partition中,通过这种方式保证了在同一个group中消息只能够消费一次。
计算group offset存储在哪个partition的公式:
Math.abs(“groupid”.hashCode())%分区数