Kafka streams报错:Caused by: java.lang.ClassNotFoundException

在这里插入图片描述


1.场景

在实时流处理工程里,既有spark代码,又有kafka代码,二者之间的依赖,依赖的依赖,把idea搞蒙了。
依赖也正确写了,就是找不到类,清除缓存反复加载,也解决不了。
Caused by: java.lang.ClassNotFoundException。。。。
在这里插入图片描述


2.代码如下

import com.tk.dwd.etltools.DateJudge;
import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.StreamsConfig;
import org.apache.kafka.streams.processor.Processor;
import org.apache.kafka.streams.processor.ProcessorContext;
import org.apache.kafka.streams.processor.ProcessorSupplier;
import org.apache.kafka.streams.processor.TopologyBuilder;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.text.ParseException;
import java.util.Properties;


public class ODS2DWD_ETL_TOPIC_5T_TCDS_M_RT_EVENT_DATA {
    public static void main(String[] args) throws IOException, ParseException {
        String str = "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
                "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
                "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
                "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
                "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
                "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
                "!!!!!============!!!!!!!!!!!!=============!!!!!!!!!!!=======!!!!!!!!!!!!\n" +
                "!!!!!!!==========!!!!!!!!!!!!===!!!==!!===!!!!!!!!!!!!!===!!!!!!!!!!!!!!\n" +
                "!!!!!!!==!!!!!!===!!!!!!!!!!!==!!!!==!!!==!!!!!!!!!!!!!!==!!!!!!!!!!!!!!\n" +
                "!!!!!!!==!!!!!!!==!!!!!!!!!!!==!!!!==!!!!=!!!!!!!!!!!!!!==!!!!!!!!!!!!!!\n" +
                "!!!!!!!==!!!!!=!!!!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!\n" +
                "!!!!!!!==!!!!==!!!!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!\n" +
                "!!!!!!!========!!!!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!\n" +
                "!!!!!!!==!!!!==!!!!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!\n" +
                "!!!!!!!==!!!!!=!!!!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!\n" +
                "!!!!!!!==!!!!!=!!!!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!!!!!!==!!!!!!!=!!!!!!\n" +
                "!!!!!!!==!!!!!!!==!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!!!!!!==!!!!!!!=!!!!!!\n" +
                "!!!!!!!==!!!!!!!==!!!!!!!!!!!!!!!!!==!!!!!!!!!!!!!!!!!!!==!!!!!!==!!!!!!\n" +
                "!!!!!!!===!!!!====!!!!!!!!!!!!!!!!===!!!!!!!!!!!!!!!!!!====!!!====!!!!!!\n" +
                "!!!!!============!!!!!!!!!!!!!!!=======!!!!!!!!!!!!!!=============!!!!!!\n" +
                "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
                "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
                "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
                "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
        System.out.println(str);
        System.out.println("================================================etl beginning ================================================");

        // 定义输入的topic
        String from = "EVENT_DATA";
        // 定义输出的topic
        String to = "DWD_EVENT_DATA";

        // 设置参数
        Properties props = new Properties();
        props.put(StreamsConfig.APPLICATION_ID_CONFIG, "logFilter");
        props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "hadoop104:9092");
        System.out.println("condfig:" + props);
        // StreamsConfig config = new StreamsConfig(props);
        System.out.println("0001");
        // 构建拓扑

        TopologyBuilder builder = new TopologyBuilder();

            builder.addSource("SOURCE", from)
                    .addProcessor("PROCESS", new ProcessorSupplier<byte[], byte[]>() {

                        @Override
                        public Processor<byte[], byte[]> get() {
                            // 具体分析处理
                            return new LogProcessor();
                        }
                    }, "SOURCE")
                    .addSink("SINK", to, "PROCESS");
        //
            // 创建kafka stream
            KafkaStreams streams = new KafkaStreams(builder, props);
            streams.start();
        }
    }


class LogProcessor implements Processor<byte[], byte[]> {

    private ProcessorContext context;

    @Override
    public void init(ProcessorContext context) {
        this.context = context;
    }

    @Override
    public void process(byte[] key, byte[] value) {
        String input = new String(value);
        System.out.println(input);
        JSONArray jarr = JSONArray.parseArray(input);
        JSONObject json = jarr.getJSONObject(0);
        System.out.println(json);



        // 如果包含“>>>”则只保留该标记后面的内容
        if (input.contains(">>>")) {
            input = input.split(">>>")[1].trim();
            // 输出到下一个topic
            context.forward("logProcessor".getBytes(), input.getBytes());
        } else {
            context.forward("logProcessor".getBytes(), input.getBytes());
        }
    }

    @Override
    public void punctuate(long timestamp) {

    }

    @Override
    public void close() {

    }
}

3.解决方案

将kafka streams的代码,移动到单独的模块里,与spark模块独立开来,这样就可以正确的加载各种类了。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,信息显示了一个`java.lang.ClassNotFoundException`异常,异常信息中指出了缺少`org.apache.commons.logging.Log`类。这个异常通常发生在Java应用程序中,当应用程序无法找到所需的类时会抛出该异常。 对于你提到的`Caused by: java.lang.ClassNotFoundException: org.apache.kafka.common.serialization.ExtendedDeserializer`异常,它表示在你的应用程序中无法找到`org.apache.kafka.common.serialization.ExtendedDeserializer`类。这可能是由于缺少相关的依赖库或配置问题导致的。 解决这个问题的方法是确保你的应用程序的类路径中包含了所需的类。你可以尝试以下几种方法来解决这个问题: 1. 确保你的项目中包含了`org.apache.commons.logging.Log`类的依赖库。你可以在项目的构建文件(如`pom.xml`或`build.gradle`)中添加相关的依赖项,以确保该类可用。 2. 检查你的应用程序的配置文件,确保正确配置了相关的类路径。你可以查看应用程序的启动脚本或配置文件,例如`catalina.sh`或`web.xml`,以确保正确设置了类路径。 3. 如果你使用的是Java开发工具(如Eclipse或IntelliJ IDEA),请确保你的项目设置中包含了所需的类。你可以检查项目的构建路径或依赖项设置,以确保相关的类被正确引入。 请注意,具体的解决方法可能因你的应用程序和环境而异。如果以上方法都无法解决问题,你可能需要进一步调查并查找其他可能的原因。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海若[MATRIX]

鼓励将是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值