Flink(五) 【消费kafka】
0.目的
测试flink消费kafka的几种消费策略
kafkaSource.setStartFromEarliest() //从起始位置
kafkaSource.setStartFromLatest() //从最新位置
kafkaSource.setStartFromTimestamp("起始时间") //从指定时间开始消费
kafkaSource.setStartFromGroupOffsets() //默认
kafkaSource.setStartFromSpecificOffsets() //指定offset
1.本地测试
package flink_01_connector.source
import java.util.Properties
import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011
import scala.collection.JavaConverters._
/**
* @description: kafka connector
* @author: HaoWu
* @create: 2020年12月16日
*/
object KafkaConnectorTest {
def main(args: Array[String]): Unit = {
// 0 初始化环境
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
env.setParallelism(1)
// 1 构建 Kafka Source
val topics = List("xes_test_anwser_detail").asJava
val props = new Properties()
props.put("bootstrap.servers", "kafka地址")
props.put("group.id", "test5")
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") //key 反序列化
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") //value 反序列化
/* props.put("enable.auto.commit", "true") //自动提交
props.put("auto.commit.interval.ms", "1500") //提交
props.put("auto.offset.reset", "lastest") //offset从最新的位置开始读取*/
val kafkaSource = new FlinkKafkaConsumer011[String](topics, new SimpleStringSchema(), props)
val lag = System.currentTimeMillis() - 24 * 3600 * 1000
kafkaSource.setStartFromTimestamp(lag) // 从前几小时开始消费
// 2 获取流
val kafkaStream: DataStream[String] = env.addSource(kafkaSource)
// 3 打印
kafkaStream.print()
// 4 执行
env.execute()
}
}
2.线上测试
package flink_01_connector.source
import java.util.Properties
import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.api.java.utils.ParameterTool
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011
import scala.collection.JavaConverters._
/**
* @description: 读取kafka流
* @author: HaoWu
* @create: 2020年12月16日
*/
object KafkaConnectorOnlineTest {
def main(args: Array[String]): Unit = {
// 0 初始化环境
val parameterTool: ParameterTool = ParameterTool.fromArgs(args)
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
env.setParallelism(1)
val topic: String = parameterTool.get("topic") // topic:可设置多个,逗号分隔
val bootStrapServer: String = parameterTool.get("bootstrap_server") // kafka集群url
val groupId: String = parameterTool.get("group_id") // 消费者组
val hours: Int = parameterTool.get("hours").toInt // 从几小时前开始消费
// val keyTabPath = parameterTool.get("keytab_path") // 安全验证
// env.registerCachedFile(keyTabPath, "keytab")
// 设置全局参数
env.getConfig.setGlobalJobParameters(parameterTool)
// 1 构建 Kafka Source
val topics = topic.split(",").toList.asJava
val props = new Properties()
props.put("bootstrap.servers", bootStrapServer)
props.put("group.id", groupId)
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") //key 反序列化
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") //value 反序列化
val kafkaSource = new FlinkKafkaConsumer011[String](topics, new SimpleStringSchema(), props)
val lag = System.currentTimeMillis() - hours * 3600 * 1000
kafkaSource.setStartFromTimestamp(lag) // 从前几小时开始消费
// kafkaSource.setStartFromEarliest() // 从最开始消费
// 2 获取流
val kafkaStream: DataStream[String] = env.addSource(kafkaSource)
// 3 打印
kafkaStream.print("| log |")
// 4 执行
env.execute()
}
}
提交作业
#!/bin/bash
source ~/.bashrc
cd $(dirname $0)
day=$(date +%Y%m%d%H%M)
#flink
jobName=KafkaConnectorOnlineTest_wuhao
clazz=flink_01_connector.source.KafkaConnectorOnlineTest
jar_path=/home//wuhao/flink-learning/jar/02_flink_learning-1.0-SNAPSHOT-jar-with-dependencies.jar
parallelism=2
sourceParallelism=4
#kafka bootstrap_server
bootstrap_server=kafka url
topic=xes_test_anwser_detail
group_id=KafkaConnectorOnlineTest_wuhao
hours=24
#kudu
kudu_instance=1v6_common_edc_online_answer
kudu_host=****:7051
kudu_flush_num=5
#-----------------------run----------------------------------------------
/software/servers/flink1.9.1_wx_dp_hive/bin/flink run -m yarn-cluster \
-ynm ${jobName} \
-yqu root.wangxiao.dp \
-c ${clazz} ${jar_path} \
--jobName ${jobName} \
--keytab_path /home/wx_dp_hive/wx_dp_hive.keytab \
--bootstrap_server ${bootstrap_server} \
--topic ${topic} \
--group_id ${group_id} \
--isSecurity ${isSecurity} \
--consumerStrategy ${consumerStrategy} \
--hours ${hours} \
--parallelism ${parallelism} \
--sourceParallelism ${sourceParallelism} \
--kudu_instance ${kudu_instance} \
--kudu_host ${kudu_host} \
--kudu_flush_num ${kudu_flush_num} >../logs/${jobName}_${day}.log 2>&1 &
Flink(五) 【消费kafka】的更多相关文章
- Flink消费Kafka数据并把实时计算的结果导入到Redis
1. 完成的场景 在很多大数据场景下,要求数据形成数据流的形式进行计算和存储.上篇博客介绍了Flink消费Kafka数据实现Wordcount计算,这篇博客需要完成的是将实时计算的结果写到redis. ...
- flink 根据时间消费kafka
经常遇到这样的场景,13点-14点的时候flink程序发生了故障,或者集群崩溃,导致实时程序挂掉1小时,程序恢复的时候想把程序倒回13点或者更前,重新消费kafka中的数据. 下面的代码就是根据指定时 ...
- Flink消费Kafka到HDFS实现及详解
1.概述 最近有同学留言咨询,Flink消费Kafka的一些问题,今天笔者将用一个小案例来为大家介绍如何将Kafka中的数据,通过Flink任务来消费并存储到HDFS上. 2.内容 这里举个消费Kaf ...
- Flink消费kafka
Flink消费Kafka https://blog.csdn.net/boling_cavalry/article/details/85549434 https://www.cnblogs.com/s ...
- 17-Flink消费Kafka写入Mysql
戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...
- Kafka设计解析(五)Kafka性能测试方法及Benchmark报告
转载自 技术世界,原文链接 Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告 摘要 本文主要介绍了如何利用Kafka自带的性能测试脚本及Kafka Manager测试Kafk ...
- Spark Streaming消费Kafka Direct保存offset到Redis,实现数据零丢失和exactly once
一.概述 上次写这篇文章文章的时候,Spark还是1.x,kafka还是0.8x版本,转眼间spark到了2.x,kafka也到了2.x,存储offset的方式也发生了改变,笔者根据上篇文章和网上文章 ...
- 构建一个flink程序,从kafka读取然后写入MYSQL
最近flink已经变得比较流行了,所以大家要了解flink并且使用flink.现在最流行的实时计算应该就是flink了,它具有了流计算和批处理功能.它可以处理有界数据和无界数据,也就是可以处理永远生产 ...
- flink⼿手动维护kafka偏移量量
flink对接kafka,官方模式方式是自动维护偏移量 但并没有考虑到flink消费kafka过程中,如果出现进程中断后的事情! 如果此时,进程中段: 1:数据可能丢失 从获取了了数据,但是在执⾏行行 ...
随机推荐
- HttpContext.Current.Request.Url 地址:获取域名
假设当前页完整地址是:http://www.test.com/aaa/bbb.aspx?id=5&name=kelli 协议名----http://域名 ---- www.test.com站 ...
- 开源的分布式事务框架 springcloud Alibaba Seata 的搭建使用 一次把坑踩完。。。
seata的使用 1. Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而 ...
- 八. Go并发编程--errGroup
一. 前言 了解 sync.WaitGroup的用法都知道 一个 goroutine 需要等待多个 goroutine 完成和多个 goroutine 等待一个 goroutine 干活时都可以解决问 ...
- 原生css实现fullPage的整屏滚动贴合
目录 1,前言 2,效果展示 3,属性说明 3.1 scroll-snap-type 3.2,scroll-snap-align 4,实际使用 4.1,兼容性 1,前言 今天摸鱼的时候,发现一个很有意 ...
- PTA 7-4 最小生成树的唯一性 (35分)
PTA 7-4 最小生成树的唯一性 (35分) 给定一个带权无向图,如果是连通图,则至少存在一棵最小生成树,有时最小生成树并不唯一.本题就要求你计算最小生成树的总权重,并且判断其是否唯一. 输入格式: ...
- 聊一聊声明式接口调用与Nacos的结合使用
背景 对于公司内部的 API 接口,在引入注册中心之后,免不了会用上服务发现这个东西. 现在比较流行的接口调用方式应该是基于声明式接口的调用,它使得开发变得更加简化和快捷. .NET 在声明式接口调用 ...
- sqlalchemy insert on duplicate update
sqlalchemy insert on duplicate update from sqlalchemy.dialects.mysql import insert insert_stmt = ins ...
- 百度ueditor编辑器注入漏洞修补查杀程序
百度ueditor编辑器注入查杀程序,用于对百度ueditor的漏洞补丁进行查杀,使用时需要保证本地正确部署了.net 4.0服务. 百度ueditor编辑器是目前网上比较流行的一个网站编辑器,但由于 ...
- 『学了就忘』Linux软件包管理 — 46、yum命令详细介绍
目录 1.yum命令的查询操作 2.使用yum命令安装服务 3.使用yum命令升级服务 4.使用yum命令卸载服务 5.yum组管理命令 (1)查询可以安装的软件组 (2)查询软件组内包含的软件 (3 ...
- [hdu7085]Pty loves SegmentTree
简单分析,不难得到以下转移--$$f_{n}=\begin{cases}1&(n=1)\\B\sum_{i=1}^{n-1}f_{i}f_{n-i}&(n\le k)\\B\sum_{ ...