Flink消费kafka消息实战
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!开始面试之前一定要准备好啊,不然也是耽搁面试
-
spring-kafka:1.3.8.RELEASE
-
Flink:1.7
在机器192.168.1.101上部署三个容器(消息生产者、zookeeper、kafka)
构建kafka相关的环境不是本文重点,因此这里利用docker快速实现,步骤如下:
-
在机器192.168.1.101上安装docker和docker-compose;
-
创建docker-compose.yml文件,内容如下:
version: ‘2’
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- “2181:2181”
kafka1:
image: wurstmeister/kafka:2.11-0.11.0.3
ports:
- “9092:9092”
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092
KAFKA_LISTENERS: PLAINTEXT://:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CREATE_TOPICS: “topic001:2:1”
volumes:
- /var/run/docker.sock:/var/run/docker.sock
producer:
image: bolingcavalry/kafka01103producer:0.0.1-SNAPSHOT
ports:
- “8080:8080”
- 在docker-compose.yml所在目录执行命令docker-compose up -d,即可启动容器;
如果您想了解更多docker环境下kafka消息生产者的细节,请参考《如何使用Docker内的kafka服务》;
在机器192.168.1.104上安装Apache Bench
不同的操作系统安装Apache Bench的命令也不一样:
-
ubuntu上的安装命令apt-get install apache2-utils;
-
centos上的安装命令yum install httpd-tools;
源码下载
接下来的实战是编写Flink应用的源码,您可以选择直接从GitHub下载这个工程的源码,地址和链接信息如下表所示:
| 名称 | 链接 | 备注 |
| :-- | :-- | :-- |
| 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |
| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |
| git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |
这个git项目中有多个文件夹,本章源码在flinkkafkademo这个文件夹下,如下图红框所示:
开发Flink应用,部署到机器192.168.1.102
-
Flink环境搭建请参考《Flink1.7从安装到体验》;
-
应用基本代码是通过mvn命令创建的,在命令行输入以下命令:
mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-java -DarchetypeVersion=1.7.0
根据提示,输入groupId为com.bolingcavalry,artifactId为flinkkafkademo,其他的直接按下回车键即可使用默认值,这样就得到了一个maven工程:flinkkafkademo;
3. 打开工程的pom.xml文件,增加以下两个依赖:
org.apache.flink
flink-connector-kafka-0.11_2.12
${flink.version}
com.alibaba
fastjson
1.2.28
- 新增一个辅助类,用于将kafka消息中的内容转换成java对象:
/**
-
@Description: 解析原始消息的辅助类
-
@author: willzhao E-mail: zq2599@gmail.com
-
@date: 2019/1/1 20:13
*/
public class JSONHelper {
/**
-
解析消息,得到时间字段
-
@param raw
-
@return
*/
public static long getTimeLongFromRawMessage(String raw){
SingleMessage singleMessage = parse(raw);
return null==singleMessage ? 0L : singleMessage.getTimeLong();
}
/**
-
将消息解析成对象
-
@param raw
-
@return
*/
public static SingleMessage parse(String raw){
SingleMessage singleMessage = null;
if (raw != null) {
singleMessage = JSONObject.parseObject(raw, SingleMessage.class);
}
return singleMessage;
}
}
- SingleMessage对象的定义:
public class SingleMessage {
private long timeLong;
private String name;
private String bizID;
private String time;
private String message;
public long getTimeLong() {
return timeLong;
}
public void setTimeLong(long timeLong) {
this.timeLong = timeLong;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBizID() {
return bizID;
}
public void setBizID(String bizID) {
this.bizID = bizID;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
- 实时处理的操作都集中在StreamingJob类,源码的关键位置已经加了注释,就不再赘述了:
/*
-
Licensed to the Apache Software Foundation (ASF) under one
-
or more contributor license agreements. See the NOTICE file
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
大厂面试场景
知识点总结
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
[外链图片转存中…(img-mM1VmWK6-1712572615152)]
大厂面试场景
[外链图片转存中…(img-DRUXg3tQ-1712572615152)]
知识点总结
[外链图片转存中…(img-Ato0Gxnr-1712572615152)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
更多推荐
所有评论(0)