SparkStreaming、kafka、mysql集成

前一段接触了一个项目,需求是mongo中的增量数据作为kafka的生产者,用sparkStreaming作为消费者,最终经过处理后写入到mysql中。之前对kafka和sparkStreaming仅仅是了解,所以用了我最熟悉的java来完成项目。

部分代码如下:

public class JsonStream {


    public static void main(String[] args) throws Exception {

        // 连接kafka的配置信息
        String brokers = "localhost:9092";
        String groupId = "1";
        String topics = "test";

        // Create context with a 30 seconds batch interval

        SparkConf sparkConf = new SparkConf().setMaster("local[*]").setAppName(
                "GetDataStream");
        JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, Durations.seconds(30));

        Set<String> topicsSet = new HashSet<>(Arrays.asList(topics.split(",")));
        Map<String, Object> kafkaParams = new HashMap<>();

        //brokers    
        kafkaParams.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers);
        //groupId
        kafkaParams.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);

        //消费者配置 反序列化
        kafkaParams.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        kafkaParams.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);

        //latest, earliest, none   消费偏移量设置
        kafkaParams.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");

        // Create direct kafka stream with brokers and topics
        JavaInputDStream<ConsumerRecord<String, String>> datas = KafkaUtils.createDirectStream(
                jssc,
                LocationStrategies.PreferConsistent(),
                ConsumerStrategies.Subscribe(topicsSet, kafkaParams));

        //  检查点设置 从上一次消费过的位置开始处理数据
        jssc.checkpoint("/Users/lihongji/Desktop/check");

        JavaDStream<String> lines = datas.map(ConsumerRecord::value);
        lines.map(m -> {
            String jsonstr = m;
            JSONObject jsonObject = JSON.parseObject(m);
            

            //逻辑处理部分查询的数据库内容
            List<Map<String, Object>> dataset;

            List<String> warnList = new ArrayList<>();

            dataset = DBUtil.query("select DISTINCT keywords FROM alertset");


            //逻辑处理部分,需要保密,如果有需要的,可以私聊我,我会将主要流程告诉你。
            getInfo(jsonObject);


            return m;

        }).print();

        jssc.start();
        jssc.awaitTermination();

    }

项目中遇到的主要问题就是对kafka发送的json数据进行解析处理,经过不断匹配后插入到mysql中,为了提高效率,插入时选择了jdbc batch来提高效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值