sparkStreaming连接kafka(Direct)

SparkStreaming连接kafka的两种方式      Spark对于Kafka的连接主要有两种方式,一种是DirectKafkaInputDStream,另外一种是KafkaInputDStream。   【Receiver-based】     这种方法使用一个 Receiver 来接收数据。在该 Receiver 的实现中使用了... 阅读详情
//创建JavaStreamingContext
JavaStreamingContext jsc = createJavaStreamingContext(null, appName, batchDurationWithSeconds);

//kafkaParams 封装了kafka的参数
Object kafkaParams = new HashMap();
for (Iterator localIterator1 = config.getInputConfigs().entrySet().iterator(); localIterator1.hasNext();)
{
    Map.Entry entry = (Map.Entry)localIterator1.next();
    ((Map)kafkaParams).put(entry.getKey().toString(), entry.getValue());
}
System.out.println("inputParam: " + kafkaParams);
Object outputConfig = new HashMap();
for (Map.Entry<Object, Object> entry : config.getOutputConfigs().entrySet())
 {
    ((HashMap)outputConfig).put(entry.getKey().toString(), entry.getValue().toString());
}
System.out.println("outputConfig: " + outputConfig);
Map<TopicPartition, Long> fromOffsets = new HashMap();
//初始化redis连接
ShardedJedis redis = RedisSingleton.instance((HashMap)outputConfig).getResource();
//获取redis中的offset
Map<String, String> kafkaOffsets = redis.hgetAll("POSITION_KAFKA_OFFSETS");
redis.close();
Pattern patter4value = Pattern.compile(Pattern.quote(":"));
//kafkaOffsets.entrySet() 形式为0:SGN_DATA 12541
for (Map.Entry<String, String> entry : kafkaOffsets.entrySet())
{
    String[] info = patter4value.split((CharSequence)entry.getKey(), 2);
    if (info.length == 2) {
        //如果不是冷启动,fromOffsets中put偏移量
        fromOffsets.put(new TopicPartition(info[1], Integer.parseInt(info[0])), Long.valueOf(Long.parseLong((String)entry.getValue())));
    }
}
//如果起始redis中的偏移量为0,则插入0
if (fromOffsets.isEmpty()) {
    for (Map.Entry<String, Integer> entry : topics.entrySet()) {
        if (((Integer)entry.getValue()).intValue() > 0) {
            for (int i = 0; i < ((Integer)entry.getValue()).intValue(); i++) {
                fromOffsets.put(new TopicPartition((String)entry.getKey(), i), Long.valueOf(0L));
            }
        }
    }
}
System.out.println("fromOffsets: " + fromOffsets);
//创建直连的sparkStreaming对象
Object stream = KafkaUtils
        .createDirectStream(jsc,
                LocationStrategies.PreferConsistent(),
                ConsumerStrategies.Assign(fromOffsets.keySet(), (Map)kafkaParams, fromOffsets));
//通过stream对象,获取各个分区的offset,并将各分区的offset存入到redis中
JavaPairDStream<String, String> mapedDatas = ((JavaInputDStream)stream).transform(new Function() {
    private static final long serialVersionUID = -6012908518603112999L;
    private StringBuilder msg = new StringBuilder();
    public Object call(Object rdd1) throws Exception {
        JavaRDD<ConsumerRecord<String, String>> rdd = (JavaRDD<ConsumerRecord<String, String>>) rdd1;
        //获取rdd分区的offset
        OffsetRange[] offsetRanges = ((HasOffsetRanges)rdd.rdd()).offsetRanges();
        ShardedJedis redis = RedisSingleton.instance((HashMap<String, String>) outputConfig).getResource();
        for (OffsetRange offset : offsetRanges)
        {
            this.msg.setLength(0);
            redis.hset("POSITION_KAFKA_OFFSETS", offset.partition() + ":" + offset.topic(), offset.fromOffset() + "");
        }
        redis.close();
        return (Object)rdd;
    }
}).mapToPair(new PhonePairFunction2());
JavaPairDStream<String, Iterable<String>> groupedData = mapedDatas.filter(new Function() {
    private static final long serialVersionUID = 6634203502402639467L;
    public Boolean call(Object v1)
            throws Exception
    {
        Tuple2<String, String> record = (Tuple2<String, String>) v1;
        return Boolean.valueOf((record != null) && (record._1 != null) && (record._2 != null));
    }
}).groupByKey();
groupedData.foreachRDD(new RddProcessor((HashMap)outputConfig));
Spark与Kafka进行连接 在Java中使用Spark与Kafka进行连接,你可以使用Spark Streaming来处理实时流数据。以下是一个简单的示例,展示了如何使用Spark Streaming从Kafka读取数据并进行处理。 阅读详情

相关推荐

Spark Streaming连接Kafka入门教程

转载请务必注明原创地址为:https://dongkelun.com/2018/05/17/sparkKafka/ 前言 首先要安装好kafka,这里不做kafka安装的介绍,本文是Spark Streaming入门教程,只是简单的介绍如何利用spark 连接kafka,并消费数据,由于博主也是才学,所以其中代码以实现为主,可能并不是最好的实现方式。 1、对应依赖 根据kafka版本选...

主要分享大数据相关的知识,如Spark、Hudi 5656

Spark Streaming与kafka对接

使用KafkaUtil来实现SparkStreaming的对接。 KafkaUtil共有两个版本: spark-streaming-kafka-0-8 spark-streaming-kafka-0-10 kafk...

chilai4545的博客 318

从VASP数据到LAMMPS模拟:手把手教你用DeePMD-kit搭建Cr-Si-Fe合金势函数

本文详细介绍了使用DeePMD-kit从VASP数据构建Cr-Si-Fe合金深度势能模型的全流程,包括数据准备、模型训练、优化及LAMMPS集成。通过实战教程,帮助研究者掌握DeePMD-kit训练技巧,实现高精度分子动力学模拟,提升材料计算效率。

weixin_33737134的博客 525

Spark Streaming对接Kafka

上述两种方式中,Direct Approach方式更加可靠,不需要Spark Streaming自己去保证维护数据的可靠性,而是由善于处理这类工作的Kafka来做。在前面的案例中,我们监听了来自网络端口的数据,实现了WordCount,但是在实际开发中并不是这样。需求:利用Spark Streaming不断处理来自Kafka生产者生产的数据,并统计出现的单词数量。3,开启Spark Streaming消费数据,将产生的日志结果存储到日志中。2,编辑Spark Streaming代码,统计单词出现的数量。

weixin_43894652的博客 1981

汽车工程师必看:从CAN到Ethernet,6种车载通信协议全解析(附应用场景对比)

本文全面解析了从CAN到Ethernet的6种车载通信协议,包括CAN、LIN、MOST、FlexRay等,并对比了它们的应用场景和技术特点。文章详细介绍了各协议的演进历程、技术优势及在现代汽车中的混合网络架构设计,为汽车工程师提供了实用的协议选型指南和未来通信技术发展趋势。

weixin_28683689的博客 494

【Out-of-Distribution Detection】Evidential Deep Learning in NeurIPS 2018 个人理解

核心思想是将分类器的概率输出视为一个狄利克雷分布(Dirichlet Distribution)并替换,之后引入两个损失分别负责保证预测结果准确性和提升被错误分类的样本的不确定性。

研究兴趣:开放集识别、开放世界识别、新类发现、增量学习、少样本学习 2436

如何使用SparkStreaming连接Kafka?

Spark Streaming支持从多种数据源获取数据,其中就包括 Kafka,要想从 数据源获取数据,首先要建立两者之间的连接,本节来介绍两种连接Kafka的方式。

zy1992As的博客 344

从零到一:用Verilog和Quartus构建智能交通灯系统的实战指南

本文详细介绍了如何使用Verilog和Quartus Prime从零开始构建智能交通灯系统。通过分步指导,包括状态机设计、时序控制、数码管显示等核心模块实现,并结合ModelSim仿真验证,帮助FPGA初学者掌握数字电路设计的关键技术。文章还提供了实际部署到FPGA开发板的调试技巧和进阶优化方案。

weixin_29172201的博客 477

SparkStreaming连接Kafka的两种方式:Receiver和Direct

1.receiver receiver连接模式:(0.10版本之后不支持) 1.使用的是kafka high-level consumer API(傻瓜版) 2.receiver从Kafka中获取的数据都是存储在SparkExecutor的内存中的,然后Spark Streaming启动的job会去处理那些数据 可靠的receiver,有确认机制 不可靠的receiver,没有确认机制...

onway_goahead的博客 436

智能小车避障功能的实现(cpp,ubuntu)

智能小车避障功能的实现(cpp,ubuntu)

weixin_62135607的博客 4376

使用 MediaPipe 身体跟踪构建不良身体姿势检测和警报系统

详细介绍如何使用 MediaPipe 身体跟踪构建不良身体姿势检测和警报系统,并附实现的源码下载链接

DT程序员的博客 1815

Spark_SparkStreaming Kafka Direct/Receiver 两种连接方式的区别

参考文章: DirectStream、Stream的区别-SparkStreaming源码分析02 https://blog.youkuaiyun.com/wisgood/article/details/51815853 spark-kafka direct方式读取和receiver方式读取的区别 https://blog.youkuaiyun.com/wzqllwy/article/details/...

迎难而上 1998

C#操作MySQL从入门到精通(1)——安装MySQL数据库

我们使用C#操作MySQL数据库第一步要做的就是安装MySQL数据库,本文就是详细讲解如何安装MySQL数据库。

qq_34059233的博客 965

一文告诉你SparkStreaming如何整合Kafka!

        关于SparkStreaming从理论到实战的部分,博主已经在前面的博客中介绍了。本篇博客,为大家带来的是SparkStreaming整合Kafka的教程! 文章目录Kafka回顾整合kafka两种模式说明1.Receiver接收方式:2.Direct直连方式spark-streaming-kafka-0-8(了解)1.Receiver2.Directspark-streaming-kafka-0-10结语

大数据梦想家 1万+

036、算子映射:如何将ONNX算子映射到NPU硬件指令?

《算子映射:ONNX到NPU的转换艺术》 本文深入探讨了将ONNX算子映射到NPU硬件指令的技术挑战与实践经验。作者通过真实案例揭示了映射过程中的常见陷阱,如Reshape算子被错误映射导致分类错误。文章详细分析了三种映射策略(直接映射、拆分映射和融合映射),并强调映射表在编译器中的核心作用。特别针对动态形状、精度对齐等难题提供了解决方案,分享了编写映射表时的实用铁律,包括先优化后映射、严格单元测试等。最后指出,成功的算子映射需要在数学语义、硬件约束和性能优化之间找到精确平衡,这种看似枯燥的工作实则决定着N

m0_50546716的博客 193

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

(三)3:scala版本的sparkstreaming基于Direct连接kafka0.8版本开发详解

sparkstreaming基于Direct连接kafka开发详解 连接kafka 1:本次/基于Direct的方式读取kafka数据 1.1Direct方式讲解 /** * 摒弃了高阶的kafkaConsumerAPI直接从kafkaBrokers获取信息,可以保证每条消息只被消费一次 * 特点: * - No receivers:没有receivers接收器,直接从kafk...

weixin_43930865的博客 428

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spark综合学习笔记(十三)SparkStreaming整合Kafka-连接方式和API版本

学习致谢; https://www.bilibili.com/video/BV1Xz4y1m7cv?p=48 介绍 在实际项目中,无论使用Storm还是SparkStreaming与Flink,主要从Kafka实时消费数据进行处理分析,流式数据实时处理技术架构大致如下: SparkStreaming+Kafka流程 流式数据----->(Flume)----->Kafka------>SparkStreaming/StructStreaming/Flink------>Redis/

斯特凡今天也很帅的博客 8299

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

sparkstreaming读取kafka消息的两种方式

sparkstreaming 消费kafka数据的 kafkautil 提供两种创建dstream的方法: 1 老版本的createStream方法 2 新版本的createDirectStream方法 通过createDirectStream方法创建出来的dstream的rdd partition 和 kafka 的topic的partition是一一对应的,通过低阶API直接从kafka的topic消费消息,并行计算效率高,默认将偏移...

大块白云的博客 1218

sparkstreaming 读取mysql_SparkStreaming读取Kafka的两种方式

本文主要从以下几个方面介绍SparkStreaming读取Kafka的两种方式:一、SparkStreaming简介二、Kafka简介三、Redis简介(可用于保存历史数据或偏移量数据)四、SparkStreaming读取Kafka数据的两种方式 五、演示Demo一、SparkStreaming简介可以参考这篇文章:SparkStreaming 详解 二、Kafka简介可以参考这篇文章:Kafka...

weixin_39715834的博客 392

SparkStreaming 整合Kafka

SparkStreaming 整合Kafka。

jx的博客 1375

springstreaming消费kafka数据的两种高可用方式详解

这种方式会周期性地查询Kafka,来获得每个topic+partition的最新的offset,从而定义每个batch的offset的范围,存放到redis和checkpoint中,Executor并依据redis中的key取出偏移量并决定每个batch要接收的offset范围,拉取到的数据供sparkStreaming处理。1. 当我们读取Topic下的数据时,它会自动对应Topic下的Partition生成相对应数量的RDD Partition,提高了计算时的并行度,提高了效率。

weixin_53854647的博客 643

canal DirectToKafka(采集数据到kafka、json解析、写入kafka)

canal DirectToKafka(采集数据到kafka、json解析、写入kafka)

Mogeko1的博客 1351

SparkStreaming-解析

1.初始化StreamingContext //SparkStreaming程序入口 val conf: SparkConf = new SparkConf().setAppName("wordcount").setMaster("local[*]")//如果需要打包运行在服务器上,不需要指定master val sc = new SparkContext(conf) sc.setLogLevel("WARN") val ssc: StreamingContext = new StreamingCont

weixin_44085996的博客 779

SparkStreaming04

SparkStreaming04 checkpoint使用 /** 如何在生产上使用checkpoint * */ object StateAppV3 extends Logging{ def main(args: Array[String]): Unit = { val checkpoint = "chk2" def functionToCreateContext(): StreamingContext = { val sparkconf = new SparkCon

weixin_43866666的博客 88

Spark Streaming 交互 Kafka的两种方式

一、Spark Streaming连Kafka(重点) 方式一:Receiver方式连:走磁盘 使用High Level API(高阶API)实现Offset自动管理,灵活性差,处理数据时,如果某一时刻数据量过大就会磁盘溢写,通过WALS(Write Ahead Logs)进行磁盘写入,0.10版本之后被舍弃, 相当于一个人拿着一个水杯去接水,水龙头的速度不定,水杯撑不下就会往盆(磁盘)中接...

weixin_34375251的博客 273
上一篇: spark-streaming连接kafka(receiver)
下一篇: 【菜鸟系列】spark常用算子总结(scala、java)--groupByKey,reduceByKey
Java_Soldier
博客等级 码龄10年 27粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值