...
|
...
|
@@ -4,16 +4,17 @@ package com.sunyo.wlpt.message.bus.service.service.kafka; |
|
|
import com.sunyo.wlpt.message.bus.service.domain.BusServer;
|
|
|
import com.sunyo.wlpt.message.bus.service.mapper.BusServerMapper;
|
|
|
import com.sunyo.wlpt.message.bus.service.mapper.ConsumerGroupMapper;
|
|
|
import com.sunyo.wlpt.message.bus.service.model.ConsumerGroup;
|
|
|
import com.sunyo.wlpt.message.bus.service.model.ConsumerGroupOffsets;
|
|
|
import com.sunyo.wlpt.message.bus.service.service.KafkaService;
|
|
|
import kafka.tools.ConsoleConsumer;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.kafka.clients.admin.*;
|
|
|
import org.apache.kafka.clients.consumer.Consumer;
|
|
|
import org.apache.kafka.clients.consumer.KafkaConsumer;
|
|
|
import org.apache.kafka.clients.consumer.OffsetAndMetadata;
|
|
|
import org.apache.kafka.common.KafkaFuture;
|
|
|
import org.apache.kafka.common.PartitionInfo;
|
|
|
import org.apache.kafka.common.TopicPartition;
|
|
|
import org.apache.kafka.common.TopicPartitionReplica;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.kafka.core.KafkaAdmin;
|
|
|
import org.springframework.stereotype.Service;
|
...
|
...
|
@@ -176,4 +177,47 @@ public class KafkaServiceImp implements KafkaService { |
|
|
return KAFKA_SERVERS;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public boolean delTopicPartitionMessage(String topic) {
|
|
|
Map<TopicPartition, RecordsToDelete> recordsToDeleteMap = new HashMap<TopicPartition, RecordsToDelete>(16);
|
|
|
DeleteRecordsResult deleteRecordsResult = null;
|
|
|
//获取topic的partition信息
|
|
|
Map<Integer, Long> partitionInfoMap = getPartitionsForTopic(topic);
|
|
|
|
|
|
for (Map.Entry<Integer, Long> entry2 : partitionInfoMap.entrySet()) {
|
|
|
TopicPartition topicPartition = new TopicPartition(topic, (int)entry2.getKey());
|
|
|
RecordsToDelete recordsToDelete = RecordsToDelete.beforeOffset((long)entry2.getValue());
|
|
|
recordsToDeleteMap.put(topicPartition, recordsToDelete);
|
|
|
}
|
|
|
deleteRecordsResult = KAFKA_ADMIN_CLIENT.deleteRecords((Map)recordsToDeleteMap);
|
|
|
Map<TopicPartition, KafkaFuture<DeletedRecords>> lowWatermarks = (Map<TopicPartition, KafkaFuture<DeletedRecords>>)deleteRecordsResult.lowWatermarks();
|
|
|
|
|
|
lowWatermarks.entrySet().forEach(entry -> {
|
|
|
try {
|
|
|
log.info("删除信息:TOPIC-{},partition-{},lastoffset-{},删除结果-{}", entry.getKey().topic(),
|
|
|
entry.getKey().partition(),
|
|
|
((DeletedRecords)((KafkaFuture)entry.getValue()).get()).lowWatermark(),
|
|
|
((KafkaFuture)entry.getValue()).isDone());
|
|
|
}
|
|
|
catch (InterruptedException | ExecutionException ex2) {
|
|
|
log.error(ex2.toString());
|
|
|
}
|
|
|
});
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
private Map<Integer, Long> getPartitionsForTopic(String topic) {
|
|
|
Collection<PartitionInfo> partitionInfos = (Collection<PartitionInfo>)KAFKA_CONSUMER.partitionsFor(topic);
|
|
|
List<TopicPartition> tp = new ArrayList<TopicPartition>();
|
|
|
List<TopicPartition> list = new ArrayList<>();
|
|
|
Map<Integer, Long> map = new HashMap<>(16);
|
|
|
partitionInfos.forEach(str -> {
|
|
|
list.add(new TopicPartition(topic, str.partition()));
|
|
|
KAFKA_CONSUMER.assign((Collection)list);
|
|
|
KAFKA_CONSUMER.seekToEnd((Collection)list);
|
|
|
map.put(str.partition(), KAFKA_CONSUMER.position(new TopicPartition(topic, str.partition())));
|
|
|
});
|
|
|
return map;
|
|
|
}
|
|
|
} |
...
|
...
|
|