消费提交位移分区

This commit is contained in:
许晓东
2021-11-14 22:10:04 +08:00
parent 1f3daec445
commit a6ddb913f6
6 changed files with 126 additions and 1 deletions

View File

@@ -122,4 +122,9 @@ public class ConsumerController {
public Object getTopicSubscribedByGroups(@RequestParam String topic) {
return consumerService.getTopicSubscribedByGroups(topic);
}
@GetMapping("/offset/partition")
public Object getOffsetPartition(@RequestParam String groupId) {
return consumerService.getOffsetPartition(groupId);
}
}

View File

@@ -36,4 +36,6 @@ public interface ConsumerService {
ResponseData getSubscribeTopicList(String groupId);
ResponseData getTopicSubscribedByGroups(String topic);
ResponseData getOffsetPartition(String groupId);
}

View File

@@ -17,12 +17,15 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import kafka.console.ConsumerConsole;
import kafka.console.TopicConsole;
import org.apache.commons.collections.CollectionUtils;
import org.apache.kafka.clients.admin.ConsumerGroupDescription;
import org.apache.kafka.clients.admin.MemberDescription;
import org.apache.kafka.clients.admin.TopicDescription;
import org.apache.kafka.clients.consumer.OffsetResetStrategy;
import org.apache.kafka.common.ConsumerGroupState;
import org.apache.kafka.common.TopicPartition;
import org.apache.kafka.common.internals.Topic;
import org.apache.kafka.common.utils.Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -42,6 +45,9 @@ public class ConsumerServiceImpl implements ConsumerService {
private TopicSubscribedInfo topicSubscribedInfo = new TopicSubscribedInfo();
@Autowired
private TopicConsole topicConsole;
@Override public ResponseData getConsumerGroupList(List<String> groupIds, Set<ConsumerGroupState> states) {
String simulateGroup = "inner_xxx_not_exit_group_###" + System.currentTimeMillis();
Set<String> groupList = new HashSet<>();
@@ -197,6 +203,15 @@ public class ConsumerServiceImpl implements ConsumerService {
return ResponseData.create().data(res).success();
}
@Override public ResponseData getOffsetPartition(String groupId) {
List<TopicDescription> topicList = topicConsole.getTopicList(Collections.singleton(Topic.GROUP_METADATA_TOPIC_NAME));
if (topicList.isEmpty()) {
return ResponseData.create().failed(Topic.GROUP_METADATA_TOPIC_NAME + " is null.");
}
int size = topicList.get(0).partitions().size();
return ResponseData.create().data(Utils.abs(groupId.hashCode()) % size);
}
class TopicSubscribedInfo {
long lastTime = System.currentTimeMillis();