在某些情况下,我使用Kafka-stream对主题的较小内存(哈希图)投影进行建模。 K,V缓存确实需要一些操作,因此对于GlobalKTable来说不是一个好例子。在这种“缓存”情况下,我希望所有同级实例都具有相同的缓存,因此我需要绕过使用者组机制。
要启用此功能,我通常只需使用随机生成的应用程序ID来启动我的应用程序,因此每个应用程序每次重启都会重新加载该主题。唯一需要注意的是,我最终在卡夫卡经纪人那里孤立了一些消费者群体,直到offsets.retention.minutes,这对于我们的运营监控工具而言并不理想。 知道如何解决此问题吗?
谢谢
答案 0 :(得分:1)
AdminClient
中有一个Java API,称为deleteConsumerGroups
,可用于删除各个ConsumerGroup。
您可以按如下所示在Kafka 2.5.0中使用它。
import java.util.Arrays;
import java.util.Properties;
import java.util.concurrent.ExecutionException;
import org.apache.kafka.clients.admin.*;
import org.apache.kafka.common.KafkaFuture;
public class DeleteConsumerGroups {
public static void main(String[] args) {
System.out.println("*** Starting AdminClient to delete a Consumer Group ***");
final Properties properties = new Properties();
properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
properties.put(AdminClientConfig.REQUEST_TIMEOUT_MS_CONFIG, "1000");
properties.put(AdminClientConfig.DEFAULT_API_TIMEOUT_MS_CONFIG, "5000");
AdminClient adminClient = AdminClient.create(properties);
String consumerGroupToBeDeleted = "console-consumer-65092";
DeleteConsumerGroupsResult deleteConsumerGroupsResult = adminClient.deleteConsumerGroups(Arrays.asList(consumerGroupToBeDeleted));
KafkaFuture<Void> resultFuture = deleteConsumerGroupsResult.all();
try {
resultFuture.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
adminClient.close();
}
}
$ kafka-consumer-groups --bootstrap-server localhost:9092 --list
console-consumer-65092
console-consumer-53268
运行上面的代码后,$ kafka-consumer-groups --bootstrap-server localhost:9092 --list
console-consumer-53268