Java kafka-производителю клиентов не удается отправить сообщение в очередь?

#java #apache-kafka

#java #apache-kafka

Вопрос:

Я пытаюсь использовать простой kafka POC с образцом производителя и потребителя. Сообщение, отправленное from console-producer , получено at console-consumer , но сообщение, отправленное from java kafka-clients producer , не получено at console-consumer . Ниже воспроизводимо,

 kafka queue version   : 2.6.0
kafka-clients version : 2.6.0
  

Java producer:

     public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        Producer<String, String> producer = new KafkaProducer(props);
        try {
            producer.send(new ProducerRecord<String, String>("enricher-co", "POC Message"));
        } catch (Exception e) {
            throw e;
        } finally {
            producer.close();
        }
    }
  

Настройка очереди Kafka была выполнена в соответствии с рекомендациями, приведенными в https://kafka.apache.org/quickstart .

Это то, что работает на консоли, производитель консоли,

 $./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic enricher-co
> Console POC
  

Консольный потребитель,

 $./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic enricher-co
Console POC
  

Пожалуйста, помогите.

Комментарии:

1. возникает какое-либо исключение? попробуйте напечатать исключение в блоке catch. так что у вас есть несколько идей.

2. Код выполняется нормально без исключений. Я даже не видел никаких сообщений уровня отладки, которые, как я думал, помогут.

3. Это помогло бы увидеть консольные команды, которые работают, для сравнения. На первый взгляд код выглядит нормально. Я думаю, что вы создаете сообщение без ключа — я, честно говоря, понятия не имею, важно это или нет, потому что я никогда не пробовал.

4. В настоящее время вы создаете сообщения в режиме «запустить и забыть», поэтому вы не получите никакого ответа / исключения от Kafka. Пожалуйста, добавьте .get() в свой send вызов.

5. @mike — да, я это знаю. Мне просто интересно, повлияет ли отсутствие ключа на доступность сообщений для потребителя, поскольку мы не знаем, как выполняется потребитель. Но я бы, конечно, согласился с get() .