根据时间戳重围消费位点
This commit is contained in:
@@ -25,6 +25,8 @@ public class ResetOffsetDTO {
|
||||
|
||||
private long offset;
|
||||
|
||||
private String dateStr;
|
||||
|
||||
public interface Level {
|
||||
int TOPIC = 1;
|
||||
int PARTITION = 2;
|
||||
|
||||
@@ -85,6 +85,7 @@ public class ConsumerController {
|
||||
res = consumerService.resetOffsetToEndpoint(offsetDTO.getGroupId(), offsetDTO.getTopic(), OffsetResetStrategy.LATEST);
|
||||
break;
|
||||
case ResetOffsetDTO.Type.TIMESTAMP:
|
||||
res = consumerService.resetOffsetByDate(offsetDTO.getGroupId(), offsetDTO.getTopic(), offsetDTO.getDateStr());
|
||||
break;
|
||||
default:
|
||||
return ResponseData.create().failed("unknown type");
|
||||
|
||||
@@ -27,6 +27,8 @@ public interface ConsumerService {
|
||||
|
||||
ResponseData resetOffsetToEndpoint(String groupId, String topic, OffsetResetStrategy strategy);
|
||||
|
||||
ResponseData resetOffsetByDate(String groupId, String topic, String dateStr);
|
||||
|
||||
ResponseData resetPartitionToTargetOffset(String groupId, TopicPartition partition, long offset);
|
||||
|
||||
ResponseData getGroupIdList();
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.xuxd.kafka.console.beans.vo.ConsumerDetailVO;
|
||||
import com.xuxd.kafka.console.beans.vo.ConsumerGroupVO;
|
||||
import com.xuxd.kafka.console.beans.vo.ConsumerMemberVO;
|
||||
import com.xuxd.kafka.console.service.ConsumerService;
|
||||
import java.text.ParseException;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
@@ -22,6 +23,7 @@ import org.apache.kafka.clients.admin.MemberDescription;
|
||||
import org.apache.kafka.clients.consumer.OffsetResetStrategy;
|
||||
import org.apache.kafka.common.ConsumerGroupState;
|
||||
import org.apache.kafka.common.TopicPartition;
|
||||
import org.apache.kafka.common.utils.Utils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import scala.Tuple2;
|
||||
@@ -131,6 +133,19 @@ public class ConsumerServiceImpl implements ConsumerService {
|
||||
return (boolean) tuple2._1() ? ResponseData.create().success() : ResponseData.create().failed(tuple2._2());
|
||||
}
|
||||
|
||||
@Override public ResponseData resetOffsetByDate(String groupId, String topic, String dateStr) {
|
||||
long timestamp = -1L;
|
||||
try {
|
||||
StringBuilder sb = new StringBuilder(dateStr.replace(" ", "T")).append(".000");
|
||||
timestamp = Utils.getDateTime(sb.toString());
|
||||
} catch (ParseException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
List<TopicPartition> partitions = consumerConsole.listSubscribeTopics(groupId).get(topic);
|
||||
Tuple2<Object, String> tuple2 = consumerConsole.resetOffsetByTimestamp(groupId, partitions, timestamp);
|
||||
return (boolean) tuple2._1() ? ResponseData.create().success() : ResponseData.create().failed(tuple2._2());
|
||||
}
|
||||
|
||||
@Override public ResponseData resetPartitionToTargetOffset(String groupId, TopicPartition partition, long offset) {
|
||||
Tuple2<Object, String> tuple2 = consumerConsole.resetPartitionToTargetOffset(groupId, partition, offset);
|
||||
return (boolean) tuple2._1() ? ResponseData.create().success() : ResponseData.create().failed(tuple2._2());
|
||||
|
||||
Reference in New Issue
Block a user