カフカのプロデューサーがハングトピックが存在しない場合

Ermintar:

私はカフカに新たなんだと話題にデータを送信する、単純なプロデューサを実装しようとしています。トピックが存在しない場合、私は例外としてsutiationを扱いたいです。

private Producer<UUID, Object> producer = createProducer(); 

private static Producer createProducer() {
    Properties props = new Properties();
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
            "mybootstrapserveraddress");
    props.put(ProducerConfig.CLIENT_ID_CONFIG, "ADAPTER");
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
            UUIDSerializer.class);
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
            JsonSerializer.class);
    props.put(ProducerConfig.REQUEST_TIMEOUT_MS_CONFIG,
            1000);
    props.put(ProducerConfig.RETRIES_CONFIG,
            1);
    props.put(ProducerConfig.RETRY_BACKOFF_MS_CONFIG,
            1000);
    return new KafkaProducer<>(props);
}

public void send(Event event, String topic){
    try {
        UUID key = UUID.randomUUID();
        producer.send(new ProducerRecord<>(topic, key , event), (rm, ex) -> {
            if (ex != null) {
                log.warn("Error sending message with key {}\n{}", new Object[]{key, ex.getMessage()});
            } else {
                log.info( "Partition for key-value {} is {}", new Object[]{key, rm.partition()});
            }
        });
    } catch (Exception e) {
        log.error("Failed to send message ",e);
    } finally {
        producer.flush();
    }
}

トピックが存在しない場合は、メッセージがポーリングされ続けています。ProducerConfigからのタイムアウトと再試行は無視されます。

[kafka-producer-network-thread | ADAPTER] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=ADAPTER] Error while fetching metadata with correlation id 6 : {my-example-topic2=UNKNOWN_TOPIC_OR_PARTITION}
[kafka-producer-network-thread | ADAPTER] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=ADAPTER] Error while fetching metadata with correlation id 7 : {my-example-topic2=UNKNOWN_TOPIC_OR_PARTITION}
[kafka-producer-network-thread | ADAPTER] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=ADAPTER] Error while fetching metadata with correlation id 8 : {my-example-topic2=UNKNOWN_TOPIC_OR_PARTITION}

私はAdminClientを通じてそのトピックが存在をチェックする必要はありません。カフカのドキュメントhttps://kafka.apache.org/documentation/#producerconfigsなし役立ちました。

問題を解決する方法はありますか?

ppatierno:

トピックが取得するためのリトライ存在しない場合には、メタデータべき最後のタイムアウト例外を発生させるデフォルトでは60秒後に終了します。それに関連したプロデューサーの設定パラメータがあるmax.block.ms(デフォルト60000)。私の知る限りでは、先にこのタイムアウトを減らすか、(あなたがしたくないものです)AdminClientを使用するよりも、フィードバックを持ってする方法はありません。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=333309&siteId=1