2

Fehler bei der Verwendung von Kafka-Komponente für Apache Camel (Version 2.19.1), ich versuche nur eingehende Nachrichten in Thema zu drucken, meine Pipeline ist so zusammengesetzt:Camel-Kafka-Komponente nicht funktioniert für Fehler: "wegen Brokers muss konfiguriert werden"

... 
context.addRoutes(new RouteBuilder() { 
      public void configure() { 
       from("kafka://localhost:9092?topic=test&groupId=testing") 
       .to("stream:out"); 
    context.start(); 
    } 
} 

mit und ohne "//" in Endpunkt versucht.

, was ich habe ist:

Exception in thread "main" org.apache.camel.FailedToCreateRouteException: Failed to create route route1: Route(route1)[[From[kafka://localhost:9092?topic=test&groupI... because of Brokers must be configured 
at org.apache.camel.impl.RouteService.warmUp(RouteService.java:147) 
at org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:3762) 
at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3669) 
at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:3455) 
at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3309) 
at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:202) 
at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3093) 
at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3089) 
at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3112) 
at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3089) 
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) 
at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:3026) 
at org.apache.camel.MainApp.main(MainApp.java:60) 
Caused by: java.lang.IllegalArgumentException: Brokers must be configured 
at org.apache.camel.component.kafka.KafkaConsumer.<init>(KafkaConsumer.java:62) 
at org.apache.camel.component.kafka.KafkaEndpoint.createConsumer(KafkaEndpoint.java:76) 
at org.apache.camel.impl.EventDrivenConsumerRoute.addServices(EventDrivenConsumerRoute.java:69) 
at org.apache.camel.impl.DefaultRoute.onStartingServices(DefaultRoute.java:103) 
at org.apache.camel.impl.RouteService.doWarmUp(RouteService.java:172) 
at org.apache.camel.impl.RouteService.warmUp(RouteService.java:145) 
... 12 more 

Process finished with exit code 1 

Ich versuche, es herauszufinden, aber ich verstehe wirklich nicht, was das Problem ist, ist mein kafka Cluster ein einzelner Broker und alle ist und läuft (Zoowärter und Server), ty für Hilfe

Antwort

1

Fügen Sie brokers=localhost:9092 dem Verbraucher uri hinzu.

+0

Jetzt bekomme ich keinen Fehler, aber der Verbraucher bleibt nicht auf, es wird mit Code 0 beendet, aber stattdessen sollte es bleiben, bis ein expliziter context.stop() auf eingehende Nachrichten wartet, warum? – Giuseppe

+1

Nein, standardmäßig (wenn Sie eine eigenständige Camel-App haben) sollte es nicht. Es gibt Lösungen, um den CamelContext am Laufen zu halten, schaue hier nach: http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html – mgyongyosi

+0

Benutze entweder die Camel Main Klasse wie von @mgyongyosi bezeichnet – Gautam

0

Mit Blick auf this example der erste Teil der URL ist die topic und dann als Parameter können Sie die brokers übergeben. Die offizielle Dokumentation scheint mir also ein wenig irreführend zu sein.

from("kafka:{{consumer.topic}}?brokers={{kafka.host}}:{{kafka.port}}" 
        + "&maxPollRecords={{consumer.maxPollRecords}}" 
        + "&consumersCount={{consumer.consumersCount}}" 
        + "&seekTo={{consumer.seekTo}}" 
        + "&groupId={{consumer.group}}") 
        .routeId("FromKafka") 
       .log("${body}"); 

Aber als allgemeine Beratung: Kamel ist open source, so dass Sie immer einen Blick auf den Code und die Beispiele dort auf Github haben. Sie können auch die Zeilen des Stack-Trace finden, die Sie dort gepostet haben, und dann nachsehen, was fehlt.

+0

mit dieser Struktur bekomme ich keinen Fehler, aber der Verbraucher bleibt nicht auf Nachrichten warten, aber sofort mit Code 0 – Giuseppe

+0

Verlassen Sie nicht benötigen ein Polling-Verbraucher? http://camel.apache.org/polling-consumer.html –

+0

Ich habe RabbitMQ-Komponente verwendet und ich brauchte nur Endpoint-Informationen zu gehen, zu bleiben und den eingehenden Stream zu hören, und andere Komponenten, die ich bereits in der Vergangenheit verwendet, taten das gleiche, Es hat ein Standard-Pollzeitintervall in der Komponente selbst, also denke ich, dass es nicht benötigt wird. – Giuseppe

Verwandte Themen