最近在项目上接入公司APP产品的用户点击日志数据时,发现消费者组的Offset值非常大,才一天的时间,已提交的Offset值就有千亿级别了。
于是不禁想了一个问题:假设一个Topic就只有一个Partition,每天产生数据量为100000000000(千亿)条,那是否会出现该分区下的消费Offset溢出的情况呢?
经过搜索发现,果然也有类似的问题被提过,答案是:完全不用担心Kafka分区的消费Offset会出现溢出的情况!
简单计算如下:
1.假设Kafka只有一个Topic,且该Topic只有一个Partition,每天写入的数据量刚好是1千亿,那么多长时间之后会出现消费Offset溢出的情况呢?
2.Kafka中的消费Offset使用的是java.lang.Long
类型,最大值为:9223372036854775807
3.按每天的生产量为1千亿算,Kafka的最大消费Offset可以支持:9223372天=9223372036854775807/1千亿 => 25269年
从上述简单的计算结果看,完全不用担心Kafka的消费Offset会有溢出的情况会出现(注:理论上是会溢出的)。
总结:
1.Kafka的消费Offset使用java.lang.Long
类型表示,最大值是一个非常大的数字
2.虽然理论上存在会溢出的时候,但是由于现实条件不满足(没有一个软件系统是可以存活成千上万年的!)
另外,Kafka的消费Offset是按Partition计算的,每个Partition的消费Offset都是从0开始累加。