Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
卡拉夫-卡夫卡OSGI捆绑包-制作人问题_Osgi_Bundle_Apache Kafka_Karaf_Producer - Fatal编程技术网

卡拉夫-卡夫卡OSGI捆绑包-制作人问题

卡拉夫-卡夫卡OSGI捆绑包-制作人问题,osgi,bundle,apache-kafka,karaf,producer,Osgi,Bundle,Apache Kafka,Karaf,Producer,我正在尝试为ApacheKaraf4.0.3版中的Kafka producer创建一个简单的捆绑包 这是我的Java代码 Properties=newproperties(); put(“bootstrap.servers”,“localhost:9092”); 道具放置(“阿克斯”、“全部”); 道具放置(“重试”,0); 道具放置(“批量大小”,16384); 道具放置(“玲儿小姐”,1); props.put(“buffer.memory”,33554432); //put(“key.se

我正在尝试为ApacheKaraf4.0.3版中的Kafka producer创建一个简单的捆绑包

这是我的Java代码

Properties=newproperties();
put(“bootstrap.servers”,“localhost:9092”);
道具放置(“阿克斯”、“全部”);
道具放置(“重试”,0);
道具放置(“批量大小”,16384);
道具放置(“玲儿小姐”,1);
props.put(“buffer.memory”,33554432);
//put(“key.serializer”、“org.apache.kafka.common.serialization.StringSerializer”);
//put(“value.serializer”、“org.apache.kafka.common.serialization.StringSerializer”);
put(“partitioner.class”、“org.apache.kafka.clients.producer.internals.DefaultPartitioner”);
Producer-Producer=new-KafkaProducer(props,new-StringSerializer(),new-StringSerializer());
//对于(int i=0;i<100;i++)
发送(新产品记录(“测试”、“数据”、输出数据));
producer.close();
我已经在pom.xml中清楚地声明了各自的依赖关系

<dependency>
        <groupId>org.apache.servicemix.bundles</groupId>
        <artifactId>org.apache.servicemix.bundles.kafka-clients</artifactId>
        <version>0.9.0.0_1</version>
</dependency>

org.apache.servicemix.bundles
org.apache.servicemix.bundles.kafka-clients
0.9.0.0_1
我也部署了kafka客户端包

但在启动制作人时,我看到以下第一次尝试时出现异常

Exception in thread "pool-135-thread-1" java.lang.ExceptionInInitializerError
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:194)
    .
    .
    .
    at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)
    at com.gilt.gfc.guava.future.FutureConverters$ScalaFutureAdapter$$anonfun$addListener$1.apply(FutureConverters.scala:72)
    at com.gilt.gfc.guava.future.FutureConverters$ScalaFutureAdapter$$anonfun$addListener$1.apply(FutureConverters.scala:72)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.kafka.common.config.ConfigException: Invalid value org.apache.kafka.clients.producer.internals.DefaultPartitioner for configuration partitioner.class: Class org.apache.kafka.clients.producer.internals.DefaultPartitioner could not be found.
    at org.apache.kafka.common.config.ConfigDef.parseType(ConfigDef.java:255)
    at org.apache.kafka.common.config.ConfigDef.define(ConfigDef.java:78)
    at org.apache.kafka.common.config.ConfigDef.define(ConfigDef.java:94)
    at org.apache.kafka.clients.producer.ProducerConfig.<clinit>(ProducerConfig.java:206)
    ... 12 more
线程“pool-135-thread-1”java.lang.ExceptionInInitializeError中的异常 位于org.apache.kafka.clients.producer.KafkaProducer.(KafkaProducer.java:194) . . . 位于com.google.common.util.concurrent.Futures$6.run(Futures.java:1319) 在com.gilt.gfc.guava.future.FutureConverters$ScalaFutureAdapter$$anonfun$addListener$1.apply(FutureConverters.scala:72) 在com.gilt.gfc.guava.future.FutureConverters$ScalaFutureAdapter$$anonfun$addListener$1.apply(FutureConverters.scala:72) 在scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 运行(Thread.java:745) 原因:org.apache.kafka.common.config.ConfigException:找不到配置分区器的无效值org.apache.kafka.clients.producer.internals.DefaultPartitioner.class:class org.apache.kafka.clients.producer.internals.DefaultPartitioner。 位于org.apache.kafka.common.config.ConfigDef.parseType(ConfigDef.java:255) 位于org.apache.kafka.common.config.ConfigDef.define(ConfigDef.java:78) 位于org.apache.kafka.common.config.ConfigDef.define(ConfigDef.java:94) 位于org.apache.kafka.clients.producer.ProducerConfig(ProducerConfig.java:206) ... 还有12个 然后连续的这个

Exception in thread "pool-136-thread-1" java.lang.NoClassDefFoundError: Could not initialize class org.apache.kafka.clients.producer.ProducerConfig
at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:194)
.
.
.
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)
at com.gilt.gfc.guava.future.FutureConverters$ScalaFutureAdapter$$anonfun$addListener$1.apply(FutureConverters.scala:72)
at com.gilt.gfc.guava.future.FutureConverters$ScalaFutureAdapter$$anonfun$addListener$1.apply(FutureConverters.scala:72)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745
线程“pool-136-thread-1”java.lang.NoClassDefFoundError中出现异常:无法初始化类org.apache.kafka.clients.producer.ProducerConfig 位于org.apache.kafka.clients.producer.KafkaProducer.(KafkaProducer.java:194) . . . 位于com.google.common.util.concurrent.Futures$6.run(Futures.java:1319) 在com.gilt.gfc.guava.future.FutureConverters$ScalaFutureAdapter$$anonfun$addListener$1.apply(FutureConverters.scala:72) 在com.gilt.gfc.guava.future.FutureConverters$ScalaFutureAdapter$$anonfun$addListener$1.apply(FutureConverters.scala:72) 在scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 运行(Thread.java:745
是否有人遇到过捆绑包的类似问题???

使用Kafka客户端版本0.8.2.2_1解决了该问题。

我在0.9.0中看到了同样的问题。结果是设置了线程上下文加载器,在这种情况下Kafka使用该类加载器来解决。因此线程上下文类加载器应该是:

  • 一个可以解析所有卡夫卡相关内容的类加载器
  • null
不知道这是否会伤害我,但补充:

Thread.currentThread().setContextClassLoader(null);

成功了。

可能对其他人有用,请在


OSGi运行时不关心您的Maven依赖项。它只关心捆绑包中的清单。如果您按名称加载类,就像您看起来所做的那样,那么您需要添加构建时配置,以便将相关包添加到导入包的列表中。或者您向MAN添加
DynamicImport包:
我最喜欢。具体怎么做取决于你如何构建你的捆绑包。使用
maven捆绑包插件
?是的,我也有同样的问题。有趣的是,如果我嵌入kafka jar(servicemix或原始kafka jar),当我实例化一个KafkaProducer时,我立即得到了这个错误,即使我可以很好地引用KafkaProducer。要么是一些奇怪的东西弄乱了错误消息,要么是一些黑暗的类加载正在进行……您的解决方案与JIRA中建议的解决方法一致:当这个拉请求被合并时,应该有另一个解决方案有效期:
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, org.apache.kafka.common.serialization.StringSerializer.class);

props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, org.apache.kafka.common.serialization.StringSerializer.class);