集群同步-》同步消费位点

This commit is contained in:
许晓东
2021-10-25 00:10:08 +08:00
parent 66e7ea0676
commit 5ccf9013e5
13 changed files with 233 additions and 6 deletions

View File

@@ -0,0 +1,39 @@
package kafka.console
import java.util.Properties
import java.util.concurrent.TimeUnit
import com.xuxd.kafka.console.config.KafkaConfig
import scala.jdk.CollectionConverters.{ListHasAsScala, MapHasAsScala}
/**
* kafka-console-ui.
*
* @author xuxd
* @date 2021-10-24 23:23:30
* */
class OperationConsole(config: KafkaConfig, topicConsole: TopicConsole,
consumerConsole: ConsumerConsole) extends KafkaConsole(config: KafkaConfig) with Logging {
def syncConsumerOffset(groupId: String, topic: String, props: Properties): (Boolean, String) = {
val thatAdmin = createAdminClient(props)
try {
val thisTopicPartitions = consumerConsole.listSubscribeTopics(groupId).get(topic).asScala.sortBy(_.partition())
val thatTopicPartitions = thatAdmin.listConsumerGroupOffsets(
groupId
).partitionsToOffsetAndMetadata.get(timeoutMs, TimeUnit.MILLISECONDS).asScala.filter(_._1.topic().equals(topic)).keySet.toList.sortBy(_.partition())
if (thatTopicPartitions != thisTopicPartitions) {
throw new IllegalStateException("topic partition inconsistent.")
}
} catch {
case ex => throw ex
} finally {
thatAdmin.close()
}
(true, "")
}
}