//创建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 Streaming连接Kafka入门教程
转载请务必注明原创地址为:https://dongkelun.com/2018/05/17/sparkKafka/ 前言 首先要安装好kafka,这里不做kafka安装的介绍,本文是Spark Streaming入门教程,只是简单的介绍如何利用spark 连接kafka,并消费数据,由于博主也是才学,所以其中代码以实现为主,可能并不是最好的实现方式。 1、对应依赖 根据kafka版本选...
Spark Streaming与kafka对接
使用KafkaUtil来实现SparkStreaming的对接。 KafkaUtil共有两个版本: spark-streaming-kafka-0-8 spark-streaming-kafka-0-10 kafk...
从VASP数据到LAMMPS模拟:手把手教你用DeePMD-kit搭建Cr-Si-Fe合金势函数
本文详细介绍了使用DeePMD-kit从VASP数据构建Cr-Si-Fe合金深度势能模型的全流程,包括数据准备、模型训练、优化及LAMMPS集成。通过实战教程,帮助研究者掌握DeePMD-kit训练技巧,实现高精度分子动力学模拟,提升材料计算效率。
Spark Streaming对接Kafka
上述两种方式中,Direct Approach方式更加可靠,不需要Spark Streaming自己去保证维护数据的可靠性,而是由善于处理这类工作的Kafka来做。在前面的案例中,我们监听了来自网络端口的数据,实现了WordCount,但是在实际开发中并不是这样。需求:利用Spark Streaming不断处理来自Kafka生产者生产的数据,并统计出现的单词数量。3,开启Spark Streaming消费数据,将产生的日志结果存储到日志中。2,编辑Spark Streaming代码,统计单词出现的数量。
汽车工程师必看:从CAN到Ethernet,6种车载通信协议全解析(附应用场景对比)
本文全面解析了从CAN到Ethernet的6种车载通信协议,包括CAN、LIN、MOST、FlexRay等,并对比了它们的应用场景和技术特点。文章详细介绍了各协议的演进历程、技术优势及在现代汽车中的混合网络架构设计,为汽车工程师提供了实用的协议选型指南和未来通信技术发展趋势。
【Out-of-Distribution Detection】Evidential Deep Learning in NeurIPS 2018 个人理解
核心思想是将分类器的概率输出视为一个狄利克雷分布(Dirichlet Distribution)并替换,之后引入两个损失分别负责保证预测结果准确性和提升被错误分类的样本的不确定性。
如何使用SparkStreaming连接Kafka?
Spark Streaming支持从多种数据源获取数据,其中就包括 Kafka,要想从 数据源获取数据,首先要建立两者之间的连接,本节来介绍两种连接Kafka的方式。
从零到一:用Verilog和Quartus构建智能交通灯系统的实战指南
本文详细介绍了如何使用Verilog和Quartus Prime从零开始构建智能交通灯系统。通过分步指导,包括状态机设计、时序控制、数码管显示等核心模块实现,并结合ModelSim仿真验证,帮助FPGA初学者掌握数字电路设计的关键技术。文章还提供了实际部署到FPGA开发板的调试技巧和进阶优化方案。
SparkStreaming连接Kafka的两种方式:Receiver和Direct
1.receiver receiver连接模式:(0.10版本之后不支持) 1.使用的是kafka high-level consumer API(傻瓜版) 2.receiver从Kafka中获取的数据都是存储在SparkExecutor的内存中的,然后Spark Streaming启动的job会去处理那些数据 可靠的receiver,有确认机制 不可靠的receiver,没有确认机制...
智能小车避障功能的实现(cpp,ubuntu)
智能小车避障功能的实现(cpp,ubuntu)
使用 MediaPipe 身体跟踪构建不良身体姿势检测和警报系统
详细介绍如何使用 MediaPipe 身体跟踪构建不良身体姿势检测和警报系统,并附实现的源码下载链接
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/...
C#操作MySQL从入门到精通(1)——安装MySQL数据库
我们使用C#操作MySQL数据库第一步要做的就是安装MySQL数据库,本文就是详细讲解如何安装MySQL数据库。
一文告诉你SparkStreaming如何整合Kafka!
关于SparkStreaming从理论到实战的部分,博主已经在前面的博客中介绍了。本篇博客,为大家带来的是SparkStreaming整合Kafka的教程! 文章目录Kafka回顾整合kafka两种模式说明1.Receiver接收方式:2.Direct直连方式spark-streaming-kafka-0-8(了解)1.Receiver2.Directspark-streaming-kafka-0-10结语
036、算子映射:如何将ONNX算子映射到NPU硬件指令?
《算子映射:ONNX到NPU的转换艺术》 本文深入探讨了将ONNX算子映射到NPU硬件指令的技术挑战与实践经验。作者通过真实案例揭示了映射过程中的常见陷阱,如Reshape算子被错误映射导致分类错误。文章详细分析了三种映射策略(直接映射、拆分映射和融合映射),并强调映射表在编译器中的核心作用。特别针对动态形状、精度对齐等难题提供了解决方案,分享了编写映射表时的实用铁律,包括先优化后映射、严格单元测试等。最后指出,成功的算子映射需要在数学语义、硬件约束和性能优化之间找到精确平衡,这种看似枯燥的工作实则决定着N
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...
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/
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字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消费消息,并行计算效率高,默认将偏移...
sparkstreaming 读取mysql_SparkStreaming读取Kafka的两种方式
本文主要从以下几个方面介绍SparkStreaming读取Kafka的两种方式:一、SparkStreaming简介二、Kafka简介三、Redis简介(可用于保存历史数据或偏移量数据)四、SparkStreaming读取Kafka数据的两种方式 五、演示Demo一、SparkStreaming简介可以参考这篇文章:SparkStreaming 详解 二、Kafka简介可以参考这篇文章:Kafka...
SparkStreaming 整合Kafka
SparkStreaming 整合Kafka。
springstreaming消费kafka数据的两种高可用方式详解
这种方式会周期性地查询Kafka,来获得每个topic+partition的最新的offset,从而定义每个batch的offset的范围,存放到redis和checkpoint中,Executor并依据redis中的key取出偏移量并决定每个batch要接收的offset范围,拉取到的数据供sparkStreaming处理。1. 当我们读取Topic下的数据时,它会自动对应Topic下的Partition生成相对应数量的RDD Partition,提高了计算时的并行度,提高了效率。
canal DirectToKafka(采集数据到kafka、json解析、写入kafka)
canal DirectToKafka(采集数据到kafka、json解析、写入kafka)
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
SparkStreaming04
SparkStreaming04 checkpoint使用 /** 如何在生产上使用checkpoint * */ object StateAppV3 extends Logging{ def main(args: Array[String]): Unit = { val checkpoint = "chk2" def functionToCreateContext(): StreamingContext = { val sparkconf = new SparkCon
Spark Streaming 交互 Kafka的两种方式
一、Spark Streaming连Kafka(重点) 方式一:Receiver方式连:走磁盘 使用High Level API(高阶API)实现Offset自动管理,灵活性差,处理数据时,如果某一时刻数据量过大就会磁盘溢写,通过WALS(Write Ahead Logs)进行磁盘写入,0.10版本之后被舍弃, 相当于一个人拿着一个水杯去接水,水龙头的速度不定,水杯撑不下就会往盆(磁盘)中接...
5656



被折叠的 条评论
为什么被折叠?



