使用Flink时,如果从Kafka中读取输入流,默认提供的是String类型的Schema: val myConsumer = new FlinkKafkaConsumer08[String]("Topic名称", new SimpleStringSchema(), properties); 如果存入Kafka中的数据不是JSON,而是Protobuf类型的数据,需要用二进制的Schema进行接收,可以自己实现一个类,很简单,只有一行代码: class ByteArrayDeseria…
Kafka消费者 从Kafka中读取数据 最近有需求要从kafak上消费读取实时数据,并将数据中的key输出到文件中,用于发布端的原始点进行比对,以此来确定是否传输过程中有遗漏数据. 不废话,直接上代码,公司架构设计 kafak 上有多个TOPIC,此代码每次需要指定一个TOPIC,一个TOPIC有3个分区Partition,所以消费的时候用多线程, 读取数据过程中直接过滤重复的key点,因为原始推送点有20W的量(可能发生在一秒或者几秒).当时我直接用的HASHMAP来过滤. 1.Consum…
注:本文来源于 <  java 实现往oracle存储过程中传递array数组类型的参数  >最近项目中遇到通过往存储过程传递数组参数的问题, 浪费了N多个小时,终于有点头绪. 具体的代码就不写上了,因为项目中存储过程的调用方法全部是封装好的(好像现在都这样,都姓3层,嘿嘿)  原理: 1.一维数组 A.单纯的一维数组的话,直接建立一个table类型就可以  TYPE TYPE_VARCHAR AS TABLE OF VARCHAR2(200); 2.多维数组 A.多维数组就要稍加修改了,如二…
1.前言 本文是在<如何计算实时热门商品>[1]一文上做的扩展,仅在功能上验证了利用Flink消费Kafka数据,把处理后的数据写入到HBase的流程,其具体性能未做调优.此外,文中并未就Flink处理逻辑做过多的分析,只因引文(若不特殊说明,文中引文皆指<如何计算实时热门商品>一文)中写的很详细了,故仅给出博主调试犯下的错.文中若有错误,欢迎大伙留言指出,谢谢! 源码在GitHub上,地址:https://github.com/L-Wg/flinkExample: 环境:Flin…
a1.sources = r1 a1.sinks = k1 a1.channels = c1 #使用内置kafka source a1.sources.r1.type = org.apache.flume.source.kafka.KafkaSource #kafka连接的zookeeper a1.sources.r1.zookeeperConnect = localhost: a1.sources.r1.topic = kkt-test-topic a1.sources.r1.batchSiz…
Flink提供了FlinkKafkaConsumer08,使用Kafka的High-level接口,从Kafka中读取指定Topic的数据,如果要从多个Topic读取数据,可以如下操作: 1.application.conf中配置 如果使用了配置管理库typesafe.config,可以在其application.conf按如下方式配置List类型的元素: myToicList:["t1","t2","t3"] 2.读取配置文件 object M…
1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public class ParseArgsKit { public static void main(String[] args) { ParameterTool parameters = ParameterTool.fromArgs(args); String host = parameters.getRequ…
1. Spark Streaming 1.1 简介(来源:spark官网介绍) Spark Streaming是Spark Core API的扩展,其是支持可伸缩.高吞吐量.容错的实时数据流处理.Spark Streaming的数据源可以为kafka,Flume,Kinesis或者是TCP socket,并且这些数据可以使用复杂的算法来处理,这些算法用高级函数表示,如map.reduce.join和window.最后被处理的数据可以被push到文件存储系统,数据库,live dashboards…
有两种:Direct直连方式.Receiver方式 1.Receiver方式: 使用kafka高层次的consumer API来实现,receiver从kafka中获取的数据都保存在spark excutor的内存中,然后由Spark Streaming启动的job来处理数据.因此一旦数据量暴增,很容易造成内存溢出. 并且,在默认配置下,这种方式可能会因为底层失败而造成数据丢失,如果要启用高可靠机制,确保零数据丢失,要启用Spark Streaming的预写日志机制(Write Ahead Lo…
大致思路: canal去mysql拉取数据,放在canal所在的节点上,并且自身对外提供一个tcp服务,我们只要写一个连接该服务的客户端,去拉取数据并且指定往kafka写数据的格式就能达到以protobuf的格式往kafka中写数据的要求. 1. 配置canal(/bigdata/canal/conf/canal.properties),然后启动canal,这样就会开启一个tcp服务 2. 写拉取数据的客户端代码 PbOfCanalToKafka package cn._51doit.flink…