停掉消费者和生产者清空Kafka数据和zookeeper数据,双副本模式下18分区的数据多次会出现数据情况1的错误,查看状态数据如模式2,但是在三副本模式下重复上述操作则没有这种情况,而且看集群副本状态也正常。
双副本模式下看到Kafka的server.log的日志,有如数据情况3的报错
情况1
PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG
18 4294925441 4266388068 -28537373
18 500 4266387988 4266387488
情况2
PartitionCount: 30 ReplicationFactor: 2 Configs:
Partition: 0 Leader: 0 Replicas: 0,1 Isr: 0
Partition: 1 Leader: 1 Replicas: 1,0 Isr: 1
Partition: 2 Leader: 0 Replicas: 0,1 Isr: 0
Partition: 3 Leader: 0 Replicas: 0,2 Isr: 0
Partition: 4 Leader: 1 Replicas: 1,0 Isr: 1
Partition: 5 Leader: 2 Replicas: 2,1 Isr: 2,1
Partition: 6 Leader: 0 Replicas: 0,1 Isr: 0
Partition: 7 Leader: 1 Replicas: 1,2 Isr: 1
Partition: 8 Leader: 2 Replicas: 2,0 Isr: 2,0
Partition: 9 Leader: 0 Replicas: 0,2 Isr: 0
Partition: 10 Leader: 1 Replicas: 1,0 Isr: 1
Partition: 11 Leader: 2 Replicas: 2,1 Isr: 2,1
Partition: 12 Leader: 0 Replicas: 0,1 Isr: 0
Partition: 13 Leader: 1 Replicas: 1,2 Isr: 1
Partition: 14 Leader: 2 Replicas: 2,0 Isr: 2,0
Partition: 15 Leader: 0 Replicas: 0,2 Isr: 0
Partition: 16 Leader: 1 Replicas: 1,0 Isr: 1
Partition: 17 Leader: 2 Replicas: 2,1 Isr: 2,1
Partition: 18 Leader: 0 Replicas: 0,1 Isr: 0
Partition: 19 Leader: 1 Replicas: 1,2 Isr: 1
Partition: 20 Leader: 2 Replicas: 2,0 Isr: 2,0
Partition: 21 Leader: 0 Replicas: 0,2 Isr: 0
Partition: 22 Leader: 1 Replicas: 1,0 Isr: 1
Partition: 23 Leader: 2 Replicas: 2,1 Isr: 2,1
Partition: 24 Leader: 0 Replicas: 0,1 Isr: 0
Partition: 25 Leader: 1 Replicas: 1,2 Isr: 1
Partition: 26 Leader: 2 Replicas: 2,0 Isr: 2,0
Partition: 27 Leader: 0 Replicas: 0,2 Isr: 0
Partition: 28 Leader: 1 Replicas: 1,0 Isr: 1
Partition: 29 Leader: 2 Replicas: 2,1 Isr: 2,1
情况3
[2021-11-23 18:17:53,925] ERROR [ReplicaFetcher replicaId=1, leaderId=3, fetcherId=1] Unexpected error occurred while processing data for partition __consumer_offsets-46 at offset 5 (kafka.server.ReplicaFetcherThread)
kafka.common.OffsetsOutOfOrderException: Out of order offsets found in append to __consumer_offsets-46: List(4272827160, 4271343398, 4271343399, 4271343400)
at kafka.log.Log.$anonfun$append$2(Log.scala:1161)
at kafka.log.Log.append(Log.scala:2404)
at kafka.log.Log.appendAsFollower(Log.scala:1071)
at kafka.cluster.Partition.doAppendRecordsToFollowerOrFutureReplica(Partition.scala:1034)
at kafka.cluster.Partition.appendRecordsToFollowerOrFutureReplica(Partition.scala:1041)
at kafka.server.ReplicaFetcherThread.processPartitionData(ReplicaFetcherThread.scala:172)
at kafka.server.AbstractFetcherThread.$anonfun$processFetchRequest$7(AbstractFetcherThread.scala:333)
at kafka.server.AbstractFetcherThread.$anonfun$processFetchRequest$6(AbstractFetcherThread.scala:321)
at kafka.server.AbstractFetcherThread.$anonfun$processFetchRequest$6$adapted(AbstractFetcherThread.scala:320)
at kafka.utils.Implicits$MapExtensionMethods$.$anonfun$forKeyValue$1(Implicits.scala:62)
at scala.collection.compat.MapExtensionMethods$.$anonfun$foreachEntry$1(PackageShared.scala:431)
at scala.collection.Iterator.foreach(Iterator.scala:943)
at scala.collection.Iterator.foreach$(Iterator.scala:943)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
at scala.collection.IterableLike.foreach(IterableLike.scala:74)
at scala.collection.IterableLike.foreach$(IterableLike.scala:73)
at scala.collection.AbstractIterable.foreach(Iterable.scala:56)
at kafka.server.AbstractFetcherThread.$anonfun$processFetchRequest$5(AbstractFetcherThread.scala:320)
at kafka.server.AbstractFetcherThread.processFetchRequest(AbstractFetcherThread.scala:320)
at kafka.server.AbstractFetcherThread.$anonfun$maybeFetch$3(AbstractFetcherThread.scala:136)
at kafka.server.AbstractFetcherThread.maybeFetch(AbstractFetcherThread.scala:135)
at kafka.server.AbstractFetcherThread.doWork(AbstractFetcherThread.scala:118)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
负数 = 过期的消息。
我不太清楚你怎么操作的,但是看你上面offset副本很多是单的,肯定会出顺序的问题的:
"Leader":该节点负责该分区的所有的读和写,每个节点的leader都是随机选择的。
"Replicas":备份的节点列表,无论该节点是否是leader或者目前是否还活着,只是显示。
"Isr":“同步备份”的节点列表,也就是活着的节点并且正在同步leader的数据。
参考来自:kafka集群安装搭建
大佬,为什么会出现消费过期的消息,我已经将生产者与消费者都停掉了,并且清空了kafka与zookeeper的数据并重启,并且设置的过期时间为7天
你看,你不告诉我怎么清理的,我怎么知道你的问题?
大佬,kafka和zookeeper的数据清理是直接物理删除重置的,kafka的配置在下面,跟问题出现情况唯一不一致的配置是默认副本数
zk的日志怎么删的?删之前,确保都停干净了吗。
大佬,zookeeper的数据目录时直接删除的,启动后我进zookeeper看了的里面只有一个zookeeper的目录其他都已经没有了,kafka的日志里面有这样一条信息
这还有脏数据啊,或者某些节点还连着这个zk的。
你把zk端口改掉,或者
netstat -unltpa|grep 2181
。大佬这个问题时因为有脏数据导致的吗,但是同样的情况我在使用三副本模式下发现就没有出现这个情况就很奇怪,甚至我在启用三副本时都没有关闭生产者的程序只是将消费端的程序暂停了,重启kafka后再次将消费者进程启动的
你启动好集群,查看一下不就知道了么
大佬你是说kafka集群吗,就是将生产者与消费端都关闭启动kafka集群查看里面有没有数据吗
大佬如果生产运行期间出现这种情况有办法修复吗
对的,一个干净的集群不会莫名其妙产生数据的
大佬其实还有一个问题点在于如果集群数据不干净,为什么相同的操作在三副本模式下数据就暂时没出现异常的情况,大约运行了块两周了吧,但是我在清除换回双副本,问他立马出现了
你好,请问这个问题修复了么,另外能稳定复现不
很久没有消费,数据过期了,就会出现负的offset。
我们kafka的版本时2.7.1
你的答案