向kafka中传数据时报错Exception in thread "Thread-5" java.lang.NoClassDefFoundError: kafk

糖人豆丁 2017-05-24 08:40:22
我所做的是一个用Struts框架写的JavaWeb工程,需要从一个Java类中将从前端获取到的数据传到kafka中,已经导入相关jar包,并且在用public static void main方法下跑时测试可以传过数据去,


import java.util.List;

import cn.xuxiaofa.web.action.CartRefAction;
import cn.xuxiaofa.web.action.cart.CartItem;
import javafx.scene.shape.Line;

import java.util.Properties;
import java.util.concurrent.TimeUnit;

import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
import kafka.serializer.StringEncoder;


public class OrderConfirmAction extends CartRefAction{
private static String line;
private static int number;
private List<CartItem> items;//购物车中的商品信息(CartItem)表
/*
* 在这里获取数据,传到spark里?
* CartItem类中包含一个Product实体类
* 该实体类有商品的名称,但是没有其所属种类
*/

public class kafkaProducer extends Thread{

private String topic;

public kafkaProducer(String topic){
super();
this.topic = topic;
}


@Override
public void run() {

Producer<Integer, String> producer = createProducer();
int i = 0;
while(true){

producer.send(new KeyedMessage<Integer, String>(topic,"message:",i++));
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public Producer<Integer, String> createProducer() {
Properties properties = new Properties();
properties.put("zookeeper.connect", "192.168.91.128:2181");//声明zk
System.out.println("serializer.class开始");
//
System.out.println("序列化类名字:"+StringEncoder.class.getName());
properties.put("serializer.class", StringEncoder.class.getName());
System.out.println("serializer.class结束");
properties.put("metadata.broker.list", "192.168.91.128:9092");// 声明kafka broker
return new Producer<Integer, String>(new ProducerConfig(properties));
}


}
public static void main(String[] args){
kafkaProducer.start();
}

public String execute() throws Exception{

items = getCart().getItems(false);
if(items.size()==0){
// request.setAttribute("cart_empty", "未购买商品,请购买商品后再结算");
return "empty";
}

//* 将购物车中的商品信息传送到Spark 里??如何去传
// * 传过去商品名称和商品购买量
//* 传过去之后,如何从数据库中取出来在前端显示

kafkaProducer kProducer = new kafkaProducer("order");// 使用kafka集群中创建好的主题 test
System.out.println("购物车中的商品种类:"+items.size());

System.out.println();
for (CartItem cartItem : items) {
System.out.println("11111111111111");
line = cartItem.getPro().getId() + " " + cartItem.getPro().getProduct_name() ;
System.out.println(line);
number = cartItem.getNum();
System.out.println(number);
kProducer.start();
System.out.println("start测试");
}
/*System.out.println("商品名称:" + cartItem.getPro().getProduct_name()
+" 商品数量:"+cartItem.getNum()
+" 商品id:"+cartItem.getPro().getId());*/

return "success";
}

//获取商品总金额
public double getTotalDang() throws Exception{
return getCart().total(false);
}
public List<CartItem> getItems() {
return items;
}
public void setItems(List<CartItem> items) {
this.items = items;
}

}


可是如果我在将从JavaWeb中获取到到数据往另一个节点的kafka传时,就报错,根据这种情况,本人猜测可能是:”原有的工程的序列化格式与kafka序列化格式不一致“,但具体该如何解决呢?
报错如下:
*****************************************************************
Exception in thread "Thread-5" java.lang.NoClassDefFoundError: kafka/serializer/StringEncoder
at cn.xuxiaofa.util.KafKaProducerUtil.createProducer(KafKaProducerUtil.java:52)
at cn.xuxiaofa.util.KafKaProducerUtil.run(KafKaProducerUtil.java:25)
Caused by: java.lang.ClassNotFoundException: kafka.serializer.StringEncoder
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
... 2 more
******************************************************************
...全文
482 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧