TbKafkaAdmin WIP
This commit is contained in:
parent
e638e60340
commit
07de3b975f
@ -437,10 +437,12 @@ public class TbRuleEngineQueueConsumerManager {
|
||||
consumers.remove(tpi).awaitCompletion();
|
||||
});
|
||||
|
||||
|
||||
// ctx.getQueueAdmin().createTopicIfNotExists();
|
||||
addedPartitions.forEach((tpi) -> {
|
||||
int partitionId = tpi.getPartition().orElse(-999999);
|
||||
String key = queueKey + "-" + partitionId;
|
||||
TbQueueConsumerTask consumer = new TbQueueConsumerTask(key, ctx.getQueueFactory().createToRuleEngineMsgConsumer(queue, partitionId));
|
||||
TbQueueConsumerTask consumer = new TbQueueConsumerTask(key, ctx.getQueueFactory().createToRuleEngineMsgConsumer(queue, null));
|
||||
consumers.put(tpi, consumer);
|
||||
consumer.subscribe(Set.of(tpi));
|
||||
launchConsumer(consumer);
|
||||
|
||||
@ -18,7 +18,10 @@ package org.thingsboard.server.queue.kafka;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.kafka.clients.admin.AdminClient;
|
||||
import org.apache.kafka.clients.admin.CreateTopicsResult;
|
||||
import org.apache.kafka.clients.admin.ListConsumerGroupOffsetsResult;
|
||||
import org.apache.kafka.clients.admin.NewTopic;
|
||||
import org.apache.kafka.clients.consumer.OffsetAndMetadata;
|
||||
import org.apache.kafka.common.TopicPartition;
|
||||
import org.apache.kafka.common.errors.TopicExistsException;
|
||||
import org.thingsboard.server.queue.TbQueueAdmin;
|
||||
import org.thingsboard.server.queue.util.PropertyUtils;
|
||||
@ -28,6 +31,8 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
/**
|
||||
* Created by ashvayka on 24.09.18.
|
||||
@ -109,6 +114,32 @@ public class TbKafkaAdmin implements TbQueueAdmin {
|
||||
}
|
||||
|
||||
public CreateTopicsResult createTopic(NewTopic topic) {
|
||||
client.listConsumerGroupOffsets("id1");
|
||||
return client.createTopics(Collections.singletonList(topic));
|
||||
}
|
||||
|
||||
public void syncOffsets(String oldGroupId, String newGroupId) throws ExecutionException, InterruptedException, TimeoutException {
|
||||
ListConsumerGroupOffsetsResult fatOffsets = client.listConsumerGroupOffsets("id1");
|
||||
Map<TopicPartition, OffsetAndMetadata> oldOffsets = new ConcurrentHashMap<>();
|
||||
client.listConsumerGroupOffsets(oldGroupId).partitionsToOffsetAndMetadata().whenComplete((res, err) -> {
|
||||
if (err != null) {
|
||||
log.warn("Failed to list consumer group offsets [{}]", oldGroupId, err);
|
||||
} else {
|
||||
oldOffsets.putAll(res);
|
||||
}
|
||||
}).get(10, TimeUnit.SECONDS);
|
||||
|
||||
Map<TopicPartition, OffsetAndMetadata> newOffsets = new ConcurrentHashMap<>();
|
||||
client.listConsumerGroupOffsets(newGroupId).partitionsToOffsetAndMetadata().whenComplete((res, err) -> {
|
||||
if (err != null) {
|
||||
log.warn("Failed to list consumer group offsets [{}]", newGroupId, err);
|
||||
} else {
|
||||
newOffsets.putAll(res);
|
||||
}
|
||||
}).get(10, TimeUnit.SECONDS);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
package org.thingsboard.server.queue.kafka;
|
||||
|
||||
import com.microsoft.aad.adal4j.AsymmetricKeyCredential;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.kafka.clients.admin.AdminClient;
|
||||
import org.apache.kafka.clients.admin.AdminClientConfig;
|
||||
import org.apache.kafka.clients.admin.ConsumerGroupListing;
|
||||
import org.apache.kafka.clients.admin.ListConsumerGroupOffsetsResult;
|
||||
import org.apache.kafka.clients.consumer.OffsetAndMetadata;
|
||||
import org.apache.kafka.common.TopicPartition;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
@Slf4j
|
||||
class TbKafkaAdminTest {
|
||||
|
||||
|
||||
Properties props;
|
||||
AdminClient admin;
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
props = new Properties();
|
||||
props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
|
||||
admin = AdminClient.create(props);
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void tearDown() {
|
||||
admin.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testListOffsets() throws ExecutionException, InterruptedException {
|
||||
log.info("Getting consumer groups list...");
|
||||
Collection<ConsumerGroupListing> consumerGroupListings = admin.listConsumerGroups().all().get();
|
||||
consumerGroupListings = consumerGroupListings.stream().sorted(Comparator.comparing(ConsumerGroupListing::groupId)).toList();
|
||||
for (ConsumerGroupListing consumerGroup : consumerGroupListings) {
|
||||
String groupId = consumerGroup.groupId();
|
||||
log.info("=== consumer group: {}", groupId);
|
||||
Map<TopicPartition, OffsetAndMetadata> consumerOffsets = admin.listConsumerGroupOffsets(groupId)
|
||||
.partitionsToOffsetAndMetadata().get();
|
||||
|
||||
// Printing the fetched offsets
|
||||
consumerOffsets.forEach((tp, om) ->log.info(tp.topic() + " partition " + tp.partition() + " offset " + om.offset()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user