web-dev-qa-db-ja.com

リストKafka Spring経由のトピック-Kafka

Kafkaコマンドと同様の結果を得るために、spring-kafkaを介してすべてのkafkaトピックを一覧表示します:

bin/kafka-topics.sh --list --zookeeper localhost:2181

以下のサービスでgetTopics()メソッドを実行すると、次のようになりますorg.Apache.kafka.common.errors.TimeoutException:トピックメタデータのフェッチ中にタイムアウトが期限切れになりました

構成:

@EnableKafka
@Configuration
public class KafkaConfig {
    @Bean
    public ConsumerFactory<String, String> consumerFactory() {
        Map<String, Object> props = new HashMap<>();
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:2181");
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, 
            StringDeserializer.class);
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, 
            StringDeserializer.class);
        return new DefaultKafkaConsumerFactory<>(props);
}

サービス:

@Service
public class TopicServiceKafkaImpl implements TopicService {
    @Autowired
    private ConsumerFactory<String, String> consumerFactory;

    @Override
    public Set<String> getTopics() {
        try (Consumer<String, String> consumer = 
            consumerFactory.createConsumer()) {
            Map<String, List<PartitionInfo>> map = consumer.listTopics();
            return map.keySet();
    }
}

Kafkaが稼働しており、アプリからトピックにメッセージを正常に送信できます。

7
Paul Croarkin

Kafka(デフォルトでは9092)ではなくZookeeper(2181)に接続しています。

Java kafkaクライアントはZKと直接通信しなくなりました。

3
Gary Russell

kafka-topics --listは、探しているメソッドを見つけることができる kafka.admin.TopicCommand クラスのラッパーであるシェルスクリプトです。

または、 AdminClient#listTopics メソッドを使用することもできます

3
cricket_007

管理クライアントを使用して、このようなトピックを一覧表示できます

    Properties properties = new Properties();
    properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");

    AdminClient adminClient = AdminClient.create(properties);

    ListTopicsOptions listTopicsOptions = new ListTopicsOptions();
    listTopicsOptions.listInternal(true);

    System.out.println("topics:" + adminClient.listTopics(listTopicsOptions).names().get());
1
Abdullah Ahçı