【问题标题】:Camel-Kafka component not workingfor error :"because of Brokers must be configured"Camel-Kafka 组件不工作错误:“因为必须配置代理”
【发布时间】:2017-09-01 13:03:31
【问题描述】:

为 Apache Camel(版本 2.19.1)使用 kafka 组件时出错,我只是想打印主题中的传入消息,我的管道是如此组合:

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

尝试在端点中使用和不使用“//”。

我得到的是:

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

我正在尝试解决这个问题,但我真的不明白问题出在哪里,我的 kafka 集群是一个单独的代理,并且一切都已启动并正在运行(动物园管理员和服务器),请大家帮忙

【问题讨论】:

    标签: java apache-kafka apache-camel stream-processing


    【解决方案1】:

    将brokers=localhost:9092 添加到消费者 uri。

    【讨论】:

    • 现在我没有收到任何错误,但消费者没有熬夜,它以代码 0 退出,但它应该一直熬夜,直到显式 context.stop() 等待传入消息,为什么?
    • 不,默认情况下(如果您有独立的 Camel 应用程序)它不应该。有一些解决方案可以保持 CamelContext 运行,请在此处查看:camel.apache.org/…
    • 要么使用 @mgyongyosi 引用的 Camel Main 类
    【解决方案2】:

    查看this example URL 的第一部分是topic,然后您可以将brokers 作为参数传递。所以官方文档对我来说似乎有点误导。

    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}");
    

    但作为一般建议:Camel 是 open source,因此您可以随时查看 github 上的代码和示例。您还可以找到您在此处发布的堆栈跟踪的那些行,然后追踪丢失的内容。

    【讨论】:

    • 使用这个结构我没有'得到任何错误,但消费者不会熬夜等待消息,而是立即退出代码0
    • 我使用了 RabbitMQ 组件,我只需要端点信息就可以了,熬夜收听传入的流,而我过去使用过的其他组件也是如此,它有一个默认的轮询时间间隔组件本身,所以我认为不需要。
    • 你是对的。也许这个骆驼客户端和你的kafka服务器之间存在版本不兼容?
    • 我目前正在使用最后一个版本的融合基础设施,这是一个选项,我会试一试。
    • 一旦你发现这是你需要的答案,请接受它
    猜你喜欢
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 2017-12-08
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    相关资源
    最近更新 更多