[尚硅谷22版shiro]学习笔记
Posted 涉洧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[尚硅谷22版shiro]学习笔记相关的知识,希望对你有一定的参考价值。
Shiro
概述
shiro是什么
Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完成:认证、授权、加密、会话管理、与 Web 集成、缓存 等。借助 Shiro 您可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。
为什么要用
自 2003 年以来,框架格局发生了相当大的变化,因此今天仍然有很多系统在使用 Shiro。这与 Shiro 的特性密不可分。
- 易于使用:使用 Shiro 构建系统安全框架非常简单。就算第一次接触也可以快速掌握。
- 全面:Shiro 包含系统安全框架需要的功能,满足安全需求的“一站式服务”。
- 灵活:Shiro 可以在任何应用程序环境中工作。虽然它可以在 Web、EJB 和 IoC 环境中工作,但不需要依赖它们。Shiro 也没有强制要求任何规范,甚至没有很多依赖项。
- 强力支持 Web:Shiro 具有出色的 Web 应用程序支持,可以基于应用程序 URL 和 Web 协议(例如 REST)创建灵活的安全策略,同时还提供一组 JSP 库来控制页面输出。
- 兼容性强:Shiro 的设计模式使其易于与其他框架和应用程序集成。Shiro 与 Spring、Grails、Wicket、Tapestry、Mule、Apache Camel、Vaadin 等框架无缝集成。
- 社区支持:Shiro 是 Apache 软件基金会的一个开源项目,有完备的社区支持,文档支持。如果需要,像 Katasoft 这样的商业公司也会提供专业的支持和服务。
与 SpringSecurity 的对比
- Spring Security 基于 Spring 开发,项目若使用 Spring 作为基础,配合 Spring Security 做权限更加方便,而 Shiro 需要和 Spring 进行整合开发;
- Spring Security 功能比 Shiro 更加丰富些,例如安全维护方面;
- Spring Security 社区资源相对比 Shiro 更加丰富;
- Shiro 的配置和使用比较简单,Spring Security 上手复杂些;
- Shiro 依赖性低,不需要任何框架和容器,可以独立运行.Spring Security 依赖 Spring 容器;
- shiro 不仅仅可以使用在 web 中,它可以工作在任何应用环境中。在集群会话时 Shiro 最重要的一个好处或许就是它的会话是独立于容器的。
基本功能
介绍
- Authentication:身份认证/登录,验证用户是不是拥有相应的身份;
- Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用 户是否能进行什么操作,如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户 对某个资源是否具有某个权限;
- Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的 所有 信息都在会话中;会话可以是普通 JavaSE 环境,也可以是 Web 环境的;
- Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
- Web Support:Web 支持,可以非常容易的集成到 Web 环境;
- Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可 以提高效率;
- Concurrency:Shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
- Testing:提供测试支持;
- Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
- Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了
原理
Shiro 架构(外部)
从外部来看 Shiro ,即从应用程序角度的来观察如何使用Shiro 完成工作
- Shiro 架构
Subject
:应用代码直接交互的对象是 Subject,也就是说 Shiro 的对外 API 核心 就是 Subject。Subject 代表了当前“用户”, 这个用户不一定 是一个具体的人,与当 前应用交互的任何东西都是 Subject,如网络爬虫, 机器人等;与 Subject 的所有交互 都会委托给 SecurityManager; Subject 其实是一个门面,SecurityManager 才是实际的执行者;SecurityManager
:安全管理器;即所有与安全有关的操作都会与 SecurityManager交互;且其管理着所有 Subject;可以看出它是 Shiro 的核心,它负责与 Shiro 的其他组件进行交互,它相当于 SpringMVC 中 DispatcherServlet 的角色Realm
:Shiro 从 Realm 获取安全数据(如用户、角色、权限),就是说SecurityManager 要验证用户身份,那么它需要从 Realm 获取相应的用户 进行比较以确定用户身份是否合法;也需要从 Realm 得到用户相应的角色/ 权限进行验证用户是否能进行操作;可以把 Realm 看成 DataSource
shiro架构(内部)
Subject
:任何可以与应用交互的“用户”;SecurityManager
:相当于 SpringMVC 中的 DispatcherServlet;是 Shiro 的心脏; 所有具体的交互都通过 SecurityManager 进行控制;它管理着所有 Subject、且负责进 行认证、授权、会话及缓存的管理。Authenticator
:负责 Subject 认证,是一个扩展点,可以自定义实现;可以使用认证策略(Authentication Strategy),即什么情况下算用户认证通过了;Authorizer
:授权器、即访问控制器,用来决定主体是否有权限进行相应的操作;即控制着用户能访问应用中的哪些功能;Realm
:可以有 1 个或多个 Realm,可以认为是安全实体数据源,即用于获取安全实体的;可以是 JDBC 实现,也可以是内存实现等等;由用户提供;所以一般在应用中都需要实现自己的 Realm;SessionManager
:管理 Session 生命周期的组件;而 Shiro 并不仅仅可以用在 Web环境,也可以用在如普通的 JavaSE 环境CacheManager
:缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据 基本上很少改变,放到缓存中后可以提高访问的性能Cryptography
:密码模块,Shiro 提高了一些常见的加密组件用于如密码加密/解密。
使用
环境搭建
引入依赖
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
ini文件
[users]
fate=zero
fuck=me
登录认证
登录认证概念
- 身份验证:一般需要提供如身份ID等一些标识信息来表明登录者的身份,如提供email,用户名/密码来证明。
- 在shiro中,用户需要提供principals(身份)和credentials(证明)给shiro,从而应用能验证用户身份:
- principals:身份,即主体的标识属性,可以是任何属性,如用户名、邮箱等,唯一即可。一个主体可以有多个principals,但只有一个Primary principals,一般是用户名/邮箱/手机号。
- credentials:证明/凭证,即只有主体知道的安全值,如密码/数字证书等。
- 最常见的principals和credentials组合就是用户名/密码
登录认证基本流程
- 收集用户身份/凭证,即如用户名/密码
- 调用 Subject.login 进行登录,如果失败将得到相应 的 AuthenticationException异常,根据异常提示用户 错误信息;否则登录成功
- 创建自定义的 Realm 类,继承 org.apache.shiro.realm.AuthenticatingRealm类,实现 doGetAuthenticationInfo() 方法
实例
四步走:
- 初始化获取SecurityManager
- 获取subject对象
- 创建token对象,web应用用户名密码从页面传递
- 完成登录
@Test
void login()
// 1.初始化获取SecurityManager
IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
// 2.获取subject对象
Subject subject = SecurityUtils.getSubject();
// 3.创建token对象,web应用用户名密码从页面传递
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("fate", "zero");
// 4.完成登录
subject.login(usernamePasswordToken);
System.out.println(usernamePasswordToken);
角色,授权
授权概念
- 授权,也叫访问控制,即在应用中控制谁访问哪些资源(如访问页面/编辑数据/页面 操作等)。在授权中需了解的几个关键对象:
主体(Subject)
、资源(Resource)
、权限 (Permission)
、角色(Role)
。 - 主体(Subject):访问应用的用户,在 Shiro 中使用 Subject 代表该用户。用户只有授权 后才允许访问相应的资源。
- 资源(Resource):在应用中用户可以访问的 URL,比如访问 JSP 页面、查看/编辑 某些 数据、访问某个业务方法、打印文本等等都是资源。用户只要授权后才能访问。
- 权限(Permission):安全策略中的原子授权单位,通过权限我们可以表示在应用中用户 有没有操作某个资源的权力。即权限表示在应用中用户能不能访问某个资源,如:访问用 户列表页面查看/新增/修改/删除用户数据(即很多时候都是CRUD(增查改删)式权限控 制)等。权限代表了用户有没有操作某个资源的权利,即反映在某个资源上的操作允不允 许。
- Shiro 支持粗粒度权限(如用户模块的所有权限)和细粒度权限(操作某个用户的权限, 即实例级别的)
- 角色(Role):
权限的集合
,一般情况下会赋予用户角色而不是权限,即这样用户可以拥有 一组权限,赋予权限时比较方便。典型的如:项目经理、技术总监、CTO、开发工程师等 都是角色,不同的角色拥有一组不同的权限
授权方式
编程式:
subject.hasRole("admin")
注解式:
@RequiresRoles("admin")
JSP/GSP 标签:
<shiro:hasRole name="admin">
</shiro:hasRole>
授权流程
- 首先调用Subject.isPermitted*/hasRole*接口,其会委托给SecurityManager,而SecurityManager接着会委托给 Authorizer;
- Authorizer是真正的授权者,如果调用如isPermitted(“user:view”),其首先会通过PermissionResolver把字符串转换成相应的Permission实例;
- 在进行授权之前,其会调用相应的Realm获取Subject相应的角色/权限用于匹配传入的角色/权限;
- Authorizer会判断Realm的角色/权限是否和传入的匹配,如果有多个Realm,会委托给ModularRealmAuthorizer进行循环判断,如果匹配如isPermitted*/hasRole* 会返回 true,否则返回false表示授权失败
实例
@Test
void testLogin()
// 1.初始化获取SecurityManager
IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
assert securityManager != null;
SecurityUtils.setSecurityManager(securityManager);
// 2.获取subject对象
Subject subject = SecurityUtils.getSubject();
// 3.创建token对象,web应用用户名密码从页面传递
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("fate", "zero");
// 4.完成登录
subject.login(usernamePasswordToken);
System.out.println(usernamePasswordToken);
System.out.println("admin:"+subject.hasRole("admin"));
System.out.println("root:"+subject.hasRole("root"));
System.out.println("user:"+subject.hasRole("user"));
System.out.println("user:add:"+subject.isPermitted("user:add"));
System.out.println("user:update:"+subject.isPermitted("user:update"));
// 无此权限直接抛出异常
subject.checkPermission("user:update");
加密
实际系统开发中,一些敏感信息需要进行加密,比如说用户的密码。Shiro 内嵌很多 常用的加密算法,比如 MD5 加密。Shiro 可以很简单的使用信息加密。
@Test
void testMD5()
String password = "password";
Md5Hash md5Hash = new Md5Hash(password);
System.out.println("md5Hash = " + md5Hash.toHex());
Md5Hash saltMd5Hash = new Md5Hash(password, "salt");
System.out.println("saltMd5Hash = " + saltMd5Hash);
Md5Hash saltMd5Hash3 = new Md5Hash(password, "salt", 3);
System.out.println("saltMd5Hash3 = " + saltMd5Hash3);
SimpleHash simpleHash = new SimpleHash("MD5", password, "salt", 3);
System.out.println("simpleHash = " + simpleHash);
assert simpleHash.equals(saltMd5Hash3);
自定义登陆认证
Shiro 默认的登录认证是不带加密的,如果想要实现加密认证需要自定义登录认证, 自定义 Realm。
public class MyRealm extends AuthenticatingRealm
/**
* 自定义的登录认证方法,Shiro 的 login 方法底层会调用该类的认证方法完成登录认证
* 需要配置自定义的 realm 生效,在 ini 文件中配置,或 Springboot 中配置
* 该方法只是获取进行对比的信息,认证逻辑还是按照 Shiro 的底层认证逻辑完成认证
* @param token 令牌
* @return @link AuthenticationInfo
* @throws AuthenticationException 身份验证异常
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException
// 1 获取身份信息
String principal = token.getPrincipal().toString();
System.out.println("principal = " + principal);
// 2 获取凭证信息
String credentials = new String((char[]) token.getCredentials());
System.out.println("credentials = " + credentials);
// 3 获取数据库中存储的用户信息
if("fate".equals(principal))
String pwd = "dda5359be921db4f73a69223ec264c11";
return new SimpleAuthenticationInfo(
token.getPrincipal(),
pwd,
ByteSource.Util.bytes("salt"), principal);
// 4 创建封装校验逻辑对象
return null;
添加配置信息,让shiro知晓你使用的是自定义的Realm
[main]
2、在shiro.ini中添加配置信息
md5CredentialsMatcher=org.apache.shiro.authc.cre
dential.Md5CredentialsMatcher
md5CredentialsMatcher.hashIterations=3
myrealm=com.atguigu.shirotest.MyRealm
myrealm.credentialsMatcher=$md5CredentialsMatcher
securityManager.realms=$myrealm
[users]
zhangsan=7174f64b13022acd3c56e2781e098a5f,role1,
role2
lisi=l4
[roles]
role1=user:insert,user:select
整合springboot
框架整合
- 引入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<version>1.9.0</version>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- 配置文件
# mybatis配置
mybatis-plus:
configuration:
# 日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/*.xml
spring:
# 数据库配置
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/shirodb?characterEncoding=utf-8&useSSL=false
password: password
username: username
# json格式
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
shiro:
# 登录接口
loginUrl: /myController/login
- 启动类
@SpringBootApplication
@MapperScan("com.fate.shiro.mapper")
public class ShiroApplication
public static void main(String[] args)
SpringApplication.run(ShiroApplication.class, args);
登录认证实现
后端接口服务实现
- 数据库表
create table user
(
id bigint auto_increment comment '编号'
primary key,
name varchar(30) null comment '用户名',
pwd varchar(50) null comment '密码',
rid bigint null comment '角色编号'
)
comment '用户表' charset = utf8;
-
生产实体与mapper/service
这里我使用的是mybatisx插件一键生成
-
编写userservice(此处只写明impl)
@Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService /** * 根据用户名得到用户信息 * * @param name 名字 * @return @link User */ @Override public User getUserInfoByName(String name) LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(User::getName,name); return baseMapper.selectOne(queryWrapper);
-
自定义realm
@Component public class MyRealm extends AuthorizingRealm @Autowired private UserService userService; /** * 自定义授权 * * @param principals 权限 * @return @link AuthorizationInfo */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) return null; /** * 自定义身份验证 * * @param token 令牌 * @return @link AuthenticationInfo * @throws AuthenticationException 身份验证异常 */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException // 1. 获取用户身份信息 String name = token.getPrincipal().toString(); // 2. 调用业务层获取用户信息 User user = userService.getUserInfoByName(name); // 3. 非空判断,将数据封装返回 if (user != null) return new SimpleAuthenticationInfo( token.getPrincipal(), user.getPwd(), ByteSource.Util.bytes("salt"), name ); return null;
-
配置类
@Slf4j @Configuration public class ShiroConfig @Autowired private MyRealm myRealm; @Bean public DefaultWebSecurityManager defaultWebSecurityManager() // 1. 创建DefaultWebSecurityManager对象 DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); // 2. 创建加密对象,配置相关属性 HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(); // 2.1 加密 matcher.setHashAlgorithmName("md5"); matcher.setHashIterations(3); // 3. 将加密对象存储到myRealm中 myRealm.setCredentialsMatcher(matcher); // 4. 将myRealm存入DefaultWebSecurityManager对象 defaultWebSecurityManager.setRealm(myRealm); // 5. 返回DefaultWebSecurityManager log.info("DefaultWebSecurityManager 初始化成功"); return defaultWebSecurityManager; @Bean public DefaultShiroFilterChainDefinition shiroFilterChainDefinition() DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); // 无需认证 defaultShiroFilterChainDefinition.addPathDefinition("/myController/userLogin","anon"); defaultShiroFilterChainDefinition.addPathDefinition("/login
Flink 尚硅谷学习笔记
简介
尚硅谷Flink(Scala版)教程丨清华硕士-武晟然老师主讲
https://www.bilibili.com/video/BV1Qp4y1Y7YN
目录
P01.尚硅谷_Flink-Flink简介------------ 07:56
P02.尚硅谷_Flink-Flink应用场景---------- 19:46
P03.尚硅谷_Flink-流式处理的提出---------------- 11:05
P04.尚硅谷_Flink-流式处理的演变------------- 15:18
P05.尚硅谷_Flink-Flink的特点------------------ 16:34
P06.尚硅谷_Flink-批处理wordcount--------------- 23:59
P07.尚硅谷_Flink-流处理wordcount------------- 20:15
P08.尚硅谷_Flink-流处理wordcount扩展测试和说明------------- 19:15
P09.尚硅谷_Flink-Flink集群部署---------------- 26:47
P010.尚硅谷_Flink-提交Job--------------------- 22:35
P011.尚硅谷_Flink-命令行提交Job----------- 07:31
P012.尚硅谷_Flink-其它方式集群部署------------------ 12:51
P013.尚硅谷_Flink-运行时架构_运行时组件----------- 08:36
P014.尚硅谷_Flink-运行时架构_作业提交流程------------- 13:23
P015.尚硅谷_Flink-运行时架构_任务调度原理(一)_并行度和slot------------- 16:29
P016.尚硅谷_Flink-运行时架构_任务调度原理(二)_slot共享----------------- 17:23
P017.尚硅谷_Flink-运行时架构_任务调度原理(三)_slot共享示例----------- 06:16
P018.尚硅谷_Flink-运行时架构_任务调度原理(四)_执行图和任务链------------- 25:36
P019.尚硅谷_Flink-运行时架构_任务调度原理(五)_自定义任务调度规则--------- 12:21
P020.尚硅谷_Flink-流处理API_Source(一)_从集合和文件读取数据------------ 16:19
P021.尚硅谷_Flink-流处理API_Source(二)_从Kafka读取数据------------------- 21:33
P022.尚硅谷_Flink-流处理API_Source(三)_自定义Source-------------------- 24:50
P023.尚硅谷_Flink-流处理API_Transform(一)_简单转换算子------------------- 06:50
P024.尚硅谷_Flink-流处理API_Transform(二)_简单分组聚合------------------ 19:16
P025.尚硅谷_Flink-流处理API_Transform(三)_reduce聚合-------------------- 11:22
P026.尚硅谷_Flink-流处理API_Transform(四)_分流操作----------------------- 12:24
P027.尚硅谷_Flink-流处理API_Transform(五)_合流操作---------------------- 19:55
P028.尚硅谷_Flink-流处理API_Flink支持的数据类型---------------------------- 09:41
P029.尚硅谷_Flink-流处理API_函数类和富函数类------------------------------ 19:41
P030.尚硅谷_Flink-流处理API_Sink(一)_文件----------------------------- 18:55
P031.尚硅谷_Flink-流处理API_Sink(二)_Kafka-------------------------- 10:45
P032.尚硅谷_Flink-流处理API_Sink(三)_Redis-------------------------- 18:30
P033.尚硅谷_Flink-流处理API_Sink(四)_ElasticSearch------------------- 16:43
P034.尚硅谷_Flink-流处理API_Sink(五)_MySQL---------------------------- 17:48
P035.尚硅谷_Flink-流处理API_Window API_窗口概念----------------------- 07:22
P036.尚硅谷_Flink-流处理API_Window API_窗口类型------------------------ 10:13
P037.尚硅谷_Flink-流处理API_Window API_窗口分配器--------------------------- 27:17
P038.尚硅谷_Flink-流处理API_Window API_窗口函数及其它可选API---------------- 21:00
P039.尚硅谷_Flink-流处理API_Window API_窗口计算测试------------------------- 15:07
P040.尚硅谷_Flink-时间语义------------------------------------------------ 17:57
P041.尚硅谷_Flink-时间语义的设置----------------------------------------- 04:33
P042.尚硅谷_Flink-Watermark概念-------------------------------------------- 19:06
P043.尚硅谷_Flink-Watermark原理和特点-------------------------------------- 15:58
P044.尚硅谷_Flink-Watermark传递------------------------------------------- 08:09
P045.尚硅谷_Flink-Watermark代码中引入------------------------------------ 16:33
P046.尚硅谷_Flink-自定义Watermark生成机制-------------------------------- 07:10
P047.尚硅谷_Flink-事件时间语义下的窗口测试------------------------------ 16:12
P048.尚硅谷_Flink-窗口起始点的确定------------------------------------- 09:21
P049.尚硅谷_Flink-状态管理(一)_状态的概念----------------------------- 08:08
P050.尚硅谷_Flink-状态管理(二)_算子状态和键控状态----------------------- 15:14
P051.尚硅谷_Flink-状态管理(三)_状态在代码中的定义和使用------------------ 27:25
P052.尚硅谷_Flink-状态编程示例(一)------------------------------------- 17:15
P053.尚硅谷_Flink-状态编程示例(二)------------------------------------- 17:30
P054.尚硅谷_Flink-ProcessFuntion_基本概念和使用-------------------------- 23:24
P055.尚硅谷_Flink-ProcessFuntion_定时器应用示例---------------------------- 32:50
P056.尚硅谷_Flink-ProcessFuntion_侧输出流应用示例-------------------------- 09:45
P057.尚硅谷_Flink-状态后端------------------------------------------------- 15:36
P058.尚硅谷_Flink-容错机制_检查点概念和原理------------------------------- 13:31
P059.尚硅谷_Flink-容错机制_检查点算法-------------------------------------- 25:46
P060.尚硅谷_Flink-容错机制_checkpoint配置---------------------------------- 26:29
P061.尚硅谷_Flink-容错机制_重启策略配置------------------------------------ 08:21
P062.尚硅谷_Flink-保存点------------------------------------------------- 07:32
P063.尚硅谷_Flink-状态一致性_基本概念----------------------------------- 10:46
P064.尚硅谷_Flink-状态一致性_Flink端到端状态一致性的保证---------------- 08:43
P065.尚硅谷_Flink-状态一致性_幂等写入和事务写入------------------------- 23:35
P066.尚硅谷_Flink-状态一致性_Flink与Kafka连接的状态一致性-------------------- 18:20
P067.尚硅谷_Flink-Table API和Flink SQL_基本概念和示例程序--------------------- 22:03
P068.尚硅谷_Flink-Table API和Flink SQL_基本程序结构-------------------------- 09:22
P069.尚硅谷_Flink-Table API和Flink SQL_表执行环境-------------------------- 15:43
P070.尚硅谷_Flink-Table API和Flink SQL_表的概念和从文件读取数据----------------- 19:14
P071.尚硅谷_Flink-Table API和Flink SQL_从Kafka读取数据------------------------- 09:29
P072.尚硅谷_Flink-Table API和Flink SQL_表的查询转换------------------------------ 11:04
P073.尚硅谷_Flink-Table API和Flink SQL_DataStream和表的转换------------------- 08:25
P074.尚硅谷_Flink-Table API和Flink SQL_输出到文件----------------------------- 25:14
P075.尚硅谷_Flink-Table API和Flink SQL_更新模式------------------------------ 10:51
P076.尚硅谷_Flink-Table API和Flink SQL_Kafka管道测试-------------------------- 17:41
P077.尚硅谷_Flink-Table API和Flink SQL_输出到ES------------------------------- 18:18
P078.尚硅谷_Flink-Table API和Flink SQL_输出到MySQL---------------------------- 08:09
P079.尚硅谷_Flink-Table API和Flink SQL_表转换成流------------------------------ 11:34
P080.尚硅谷_Flink-Table API和Flink SQL_流处理和SQL查询的不同------------------ 07:07
P081.尚硅谷_Flink-Table API和Flink SQL_动态表和持续查询---------------------- 12:24
P082.尚硅谷_Flink-Table API和Flink SQL_持续查询示例具体过程----------------- 12:50
P083.尚硅谷_Flink-Table API和Flink SQL_时间特性(一)_处理时间----------------- 20:16
P084.尚硅谷_Flink-Table API和Flink SQL_时间特性(二)_事件时间------------------ 14:16
P085.尚硅谷_Flink-Table API和Flink SQL_窗口(一)_分组窗口--------------------- 13:11
P086.尚硅谷_Flink-Table API和Flink SQL_窗口(二)_分组窗口测试-------------------- 18:43
P087.尚硅谷_Flink-Table API和Flink SQL_窗口(三)_Over窗口----------------------- 11:58
P088.尚硅谷_Flink-Table API和Flink SQL_窗口(四)_Over窗口测试------------------------ 13:03
P089.尚硅谷_Flink-Table API和Flink SQL_函数(一)_系统内置函数---------------------- 11:04
P090.尚硅谷_Flink-Table API和Flink SQL_函数(二)_UDF函数_标量函数----------------- 14:39
P091.尚硅谷_Flink-Table API和Flink SQL_函数(三)_UDF函数_表函数--------------------- 17:19
P092.尚硅谷_Flink-Table API和Flink SQL_函数(四)_UDF函数_聚合函数---------------- 26:58
P093.尚硅谷_Flink-Table API和Flink SQL_函数(五)_UDF函数_表聚合函数------------- 27:56
P094.尚硅谷_Flink项目-电商用户行为分析_批处理和流处理以及项目选型--------------- 08:12
P095.尚硅谷_Flink项目-电商用户行为分析_用户行为分析应用场景---------------------- 15:27
P096.尚硅谷_Flink项目-电商用户行为分析_模块设计和数据分析------------------------ 09:12
P097.尚硅谷_Flink项目-电商用户行为分析_模块需求分析_实时热门商品统计(一)-------- 21:03
P098.尚硅谷_Flink项目-电商用户行为分析_模块需求分析_实时热门商品统计(二)--------- 09:07
P099.尚硅谷_Flink项目-电商用户行为分析_模块需求分析_其它需求------------------- 10:04
P100.尚硅谷_Flink项目-电商用户行为分析_项目框架搭建--------------------------------- 10:22
P101.尚硅谷_Flink项目-电商用户行为分析_实时热门商品统计(一)_窗口聚合-------------------- 27:55
P102.尚硅谷_Flink项目-电商用户行为分析_实时热门商品统计(二)_排序统计输出-------------------------- 27:14
P103.尚硅谷_Flink项目-电商用户行为分析_实时热门商品统计(三)_从Kafka消费数据测试------------------ 20:51
P104.尚硅谷_Flink项目-电商用户行为分析_实时热门商品统计(四)_批量消费Kafka数据测试---------------- 10:03
P105.尚硅谷_Flink项目-电商用户行为分析_实时热门商品统计(五)_Table API和SQL实现------------------- 28:43
P106.尚硅谷_Flink项目-电商用户行为分析_实时热门页面流量统计(一)_开窗聚合统计-------------------- 26:06
P107.尚硅谷_Flink项目-电商用户行为分析_实时热门页面流量统计(二)_统计结果排序输出----------------- 09:47
P108.尚硅谷_Flink项目-电商用户行为分析_实时热门页面流量统计(三)_乱序数据的处理------------------- 21:04
P109.尚硅谷_Flink项目-电商用户行为分析_实时热门页面流量统计(四)_保证状态更新结果正确-------------- 21:41
P110.尚硅谷_Flink项目-电商用户行为分析_PV统计(一)_基本实现--------------------------------------- 20:39
P111.尚硅谷_Flink项目-电商用户行为分析_PV统计(二)_数据并行的优化-------------------------------- 19:22
P112.尚硅谷_Flink项目-电商用户行为分析_UV统计(一)_基本实现-------------------------------------- 15:28
P113.尚硅谷_Flink项目-电商用户行为分析_UV统计(二)_布隆过滤器去重思路和程序架构------------------- 30:48
P114.尚硅谷_Flink项目-电商用户行为分析_UV统计(三)_布隆过滤器简单实现----------------------------- 09:12
P115.尚硅谷_Flink项目-电商用户行为分析_UV统计(四)_UV去重的布隆过滤器实现------------------------- 23:32
P116.尚硅谷_Flink项目-电商用户行为分析_APP市场推广统计(一)_自定义数据源------------------------- 17:03
P117.尚硅谷_Flink项目-电商用户行为分析_APP市场推广统计(二)_开窗聚合统计输出--------------------- 20:44
P118.尚硅谷_Flink项目-电商用户行为分析_广告点击量统计分析(一)_基本需求实现----------------------- 19:19
P119.尚硅谷_Flink项目-电商用户行为分析_广告点击量统计分析(二)_刷单行为过滤思路和整体框架--------- 14:28
P120.尚硅谷_Flink项目-电商用户行为分析_广告点击量统计分析(三)_刷单行为过滤代码实现-------------- 23:20
P121.尚硅谷_Flink项目-电商用户行为分析_恶意登录检测(一)_实现思路和代码框架-------------------- 18:17
P122.尚硅谷_Flink项目-电商用户行为分析_恶意登录检测(二)_具体代码实现--------------------------- 18:21
P123.尚硅谷_Flink项目-电商用户行为分析_恶意登录检测(三)_代码改进------------------------------- 18:19
P124.尚硅谷_Flink项目-电商用户行为分析_恶意登录检测(四)_CEP代码实现--------------------------- 30:33
P125.尚硅谷_Flink项目-电商用户行为分析_CEP简介(一)_CEP介绍及Pattern API整体概念---------------- 12:24
P126.尚硅谷_Flink项目-电商用户行为分析_CEP简介(二)_个体模式----------------------------------- 12:41
P127.尚硅谷_Flink项目-电商用户行为分析_CEP简介(三)_模式序列------------------------------------- 10:24
P128.尚硅谷_Flink项目-电商用户行为分析_CEP简介(四)_模式的检测和事件处理------------------------- 09:50
P129.尚硅谷_Flink项目-电商用户行为分析_订单超时检测(一)_实现思路和程序架构-------------------- 19:50
P130.尚硅谷_Flink项目-电商用户行为分析_订单超时检测(二)_CEP具体代码实现----------------------- 17:29
P131.尚硅谷_Flink项目-电商用户行为分析_订单超时检测(三)_流式输入数据测试-------------------- 06:42
P132.尚硅谷_Flink项目-电商用户行为分析_订单超时检测(四)_ProcessFunction代码实现------------- 32:20
P133.尚硅谷_Flink项目-电商用户行为分析_双流实时对账(一)_需求分析和整体架构-------------- 13:50
P134.尚硅谷_Flink项目-电商用户行为分析_双流实时对账(二)_合流代码实现------------------------ 22:24
P135.尚硅谷_Flink项目-电商用户行为分析_Join API(一)_Window Join--------------------------- 12:56
P136.尚硅谷_Flink项目-电商用户行为分析_Join API(二)_Interval Join-------------------------- 09:47
P137.尚硅谷_Flink项目-电商用户行为分析_双流实时对账(三)_Join代码实现----------------------- 09:22详情
P01.尚硅谷_Flink-Flink简介------------ 07:56
P02.尚硅谷_Flink-Flink应用场景---------- 19:46处理方式: 流处理,批处理
处理延时: 实时,离线
传统数据处理框架基于有限数据集
P03.尚硅谷_Flink-流式处理的提出---------------- 11:05
P04.尚硅谷_Flink-流式处理的演变------------- 15:18第一代流处理框架: storm (低延时)
第二代流处理框架: Spark (高吞吐,正确性,微批次,秒级延时)
第三代流处理框架: Flink ()
P05.尚硅谷_Flink-Flink的特点------------------ 16:34high: Table API ,
mid: DataStream API ,
low: ProcessFunction
P06.尚硅谷_Flink-批处理wordcount--------------- 23:59pom.xml
注意视频中的 scala-maven-plugin 4.4.0 我使用的是 4.5.3
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.atguigu</groupId> <artifactId>FlinkTutorial</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-scala_2.12</artifactId> <version>1.10.1</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-scala_2.12</artifactId> <version>1.10.1</version> </dependency> </dependencies> <build> <plugins> <!--将scala文件编译成class文件--> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>4.5.3</version> <executions> <execution> <!--声明绑定到maven的compile阶段--> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> <!--打包成jar --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
如果无法新增scala文件,说明本机没有安装scala JDK ,IDEA 没有配置 scala 插件,请用40分钟转到本文https://blog.csdn.net/wei198621/article/details/119417753
学习一下 安装 scala JDK 及 IDEA 插件 ,然后继续。。。
//简单计数
package com.atguigu.wc import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment} import org.apache.flink.api.scala._ //隐式转换 /** * @author leowei * @date 2021/8/5 - 15:39 * * 批处理 wordCount */ object WordCount { def main(args: Array[String]): Unit = { // 01 创建一个批处理的 执行环境 val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment // 02 从文件中读取数据 val inputPath:String="C:\\\\workspace\\\\workspace_idea\\\\FlinkTutorial\\\\src\\\\main\\\\resources\\\\hello.txt"; val inputDataSet:DataSet[String] = env.readTextFile(inputPath); //03 对数据进行转换处理统计,先分词,再按照word进行分组,最后进行聚合统计 val resultDataSet: DataSet[(String,Int)] =inputDataSet .flatMap(_.split(" ")) //用空格分隔字符串 .map((_,1)) // 将字符串转换为 String,Int 类型的二元组,_表示字符串本身 //.groupBy(0) //以第一个元素作为key ,进行分组 //.sum(1) // 对所有数据的第二个元素求和 //04 打印输出 resultDataSet.print() } }
//分组统计
package com.atguigu.wc import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment} import org.apache.flink.api.scala._ //隐式转换 /** * @author leowei * @date 2021/8/5 - 15:39 * * 批处理 wordCount */ object WordCount { def main(args: Array[String]): Unit = { // 01 创建一个批处理的 执行环境 val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment // 02 从文件中读取数据 val inputPath:String="C:\\\\workspace\\\\workspace_idea\\\\FlinkTutorial\\\\src\\\\main\\\\resources\\\\hello.txt"; val inputDataSet:DataSet[String] = env.readTextFile(inputPath); //03 对数据进行转换处理统计,先分词,再按照word进行分组,最后进行聚合统计 val resultDataSet: DataSet[(String,Int)] =inputDataSet .flatMap(_.split(" ")) //用空格分隔字符串 .map((_,1)) // 将字符串转换为 String,Int 类型的二元组,_表示字符串本身 .groupBy(0) //以第一个元素作为key ,进行分组 .sum(1) // 对所有数据的第二个元素求和 //04 打印输出 resultDataSet.print() } }
P07.尚硅谷_Flink-流处理wordcount------------- 20:15package com.atguigu.wc import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment import org.apache.flink.streaming.api.scala._ /** * @author leowei * @date 2021/8/5 - 18:48 * */ object WordCountStream { def main(args: Array[String]): Unit = { //01 创建流处理执行环境 val env = StreamExecutionEnvironment.getExecutionEnvironment //02 接受一个socket 文本流 val inputDataStream = env.socketTextStream("localhost", 7777) //03 进行转化处理统计 val resultDataStream =inputDataStream .flatMap(_.split(" ")) // .flatMap(x=>x.split(" ")) .filter(_.nonEmpty) .map((_,1)) //map(x=>x,1) .keyBy(0) .sum(1) //04 打印输出 resultDataStream.print() //05 启动任务执行 env.execute("word count stream ....") } }
https://www.cnblogs.com/fander/p/10551391.html
---------20210805
P08.尚硅谷_Flink-流处理wordcount扩展测试和说明------------- 19:15
P09.尚硅谷_Flink-Flink集群部署---------------- 26:47
P010.尚硅谷_Flink-提交Job--------------------- 22:35
P011.尚硅谷_Flink-命令行提交Job----------- 07:31
P012.尚硅谷_Flink-其它方式集群部署------------------ 12:51
P013.尚硅谷_Flink-运行时架构_运行时组件----------- 08:36
P014.尚硅谷_Flink-运行时架构_作业提交流程------------- 13:23
P015.尚硅谷_Flink-运行时架构_任务调度原理(一)_并行度和slot------------- 16:29
P016.尚硅谷_Flink-运行时架构_任务调度原理(二)_slot共享----------------- 17:23
P017.尚硅谷_Flink-运行时架构_任务调度原理(三)_slot共享示例----------- 06:16
P018.尚硅谷_Flink-运行时架构_任务调度原理(四)_执行图和任务链------------- 25:36
P019.尚硅谷_Flink-运行时架构_任务调度原理(五)_自定义任务调度规则--------- 12:21
P020.尚硅谷_Flink-流处理API_Source(一)_从集合和文件读取数据------------ 16:19
P021.尚硅谷_Flink-流处理API_Source(二)_从Kafka读取数据------------------- 21:33
P022.尚硅谷_Flink-流处理API_Source(三)_自定义Source-------------------- 24:50
P023.尚硅谷_Flink-流处理API_Transform(一)_简单转换算子------------------- 06:50
P024.尚硅谷_Flink-流处理API_Transform(二)_简单分组聚合------------------ 19:16
P025.尚硅谷_Flink-流处理API_Transform(三)_reduce聚合-------------------- 11:22
P026.尚硅谷_Flink-流处理API_Transform(四)_分流操作----------------------- 12:24
P027.尚硅谷_Flink-流处理API_Transform(五)_合流操作---------------------- 19:55
P028.尚硅谷_Flink-流处理API_Flink支持的数据类型---------------------------- 09:41
P029.尚硅谷_Flink-流处理API_函数类和富函数类------------------------------ 19:41
P030.尚硅谷_Flink-流处理API_Sink(一)_文件----------------------------- 18:55
P031.尚硅谷_Flink-流处理API_Sink(二)_Kafka-------------------------- 10:45
P032.尚硅谷_Flink-流处理API_Sink(三)_Redis-------------------------- 18:30
P033.尚硅谷_Flink-流处理API_Sink(四)_ElasticSearch------------------- 16:43
P034.尚硅谷_Flink-流处理API_Sink(五)_MySQL---------------------------- 17:48
P035.尚硅谷_Flink-流处理API_Window API_窗口概念----------------------- 07:22
P036.尚硅谷_Flink-流处理API_Window API_窗口类型------------------------ 10:13
P037.尚硅谷_Flink-流处理API_Window API_窗口分配器--------------------------- 27:17
P038.尚硅谷_Flink-流处理API_Window API_窗口函数及其它可选API---------------- 21:00
P039.尚硅谷_Flink-流处理API_Window API_窗口计算测试------------------------- 15:07
P040.尚硅谷_Flink-时间语义------------------------------------------------ 17:57
P041.尚硅谷_Flink-时间语义的设置----------------------------------------- 04:33
P042.尚硅谷_Flink-Watermark概念-------------------------------------------- 19:06
P043.尚硅谷_Flink-Watermark原理和特点-------------------------------------- 15:58
P044.尚硅谷_Flink-Watermark传递------------------------------------------- 08:09
P045.尚硅谷_Flink-Watermark代码中引入------------------------------------ 16:33
P046.尚硅谷_Flink-自定义Watermark生成机制-------------------------------- 07:10
P047.尚硅谷_Flink-事件时间语义下的窗口测试------------------------------ 16:12
P048.尚硅谷_Flink-窗口起始点的确定------------------------------------- 09:21
P049.尚硅谷_Flink-状态管理(一)_状态的概念----------------------------- 08:08
P050.尚硅谷_Flink-状态管理(二)_算子状态和键控状态----------------------- 15:14
P051.尚硅谷_Flink-状态管理(三)_状态在代码中的定义和使用------------------ 27:25
P052.尚硅谷_Flink-状态编程示例(一)------------------------------------- 17:15
P053.尚硅谷_Flink-状态编程示例(二)------------------------------------- 17:30
P054.尚硅谷_Flink-ProcessFuntion_基本概念和使用-------------------------- 23:24
P055.尚硅谷_Flink-ProcessFuntion_定时器应用示例---------------------------- 32:50
P056.尚硅谷_Flink-ProcessFuntion_侧输出流应用示例-------------------------- 09:45
P057.尚硅谷_Flink-状态后端------------------------------------------------- 15:36
P058.尚硅谷_Flink-容错机制_检查点概念和原理------------------------------- 13:31
P059.尚硅谷_Flink-容错机制_检查点算法-------------------------------------- 25:46
P060.尚硅谷_Flink-容错机制_checkpoint配置---------------------------------- 26:29
P061.尚硅谷_Flink-容错机制_重启策略配置------------------------------------ 08:21
P062.尚硅谷_Flink-保存点------------------------------------------------- 07:32
P063.尚硅谷_Flink-状态一致性_基本概念----------------------------------- 10:46
P064.尚硅谷_Flink-状态一致性_Flink端到端状态一致性的保证---------------- 08:43
P065.尚硅谷_Flink-状态一致性_幂等写入和事务写入------------------------- 23:35
P066.尚硅谷_Flink-状态一致性_Flink与Kafka连接的状态一致性-------------------- 18:20
P067.尚硅谷_Flink-Table API和Flink SQL_基本概念和示例程序--------------------- 22:03
P068.尚硅谷_Flink-Table API和Flink SQL_基本程序结构-------------------------- 09:22
P069.尚硅谷_Flink-Table API和Flink SQL_表执行环境-------------------------- 15:43
P070.尚硅谷_Flink-Table API和Flink SQL_表的概念和从文件读取数据----------------- 19:14
P071.尚硅谷_Flink-Table API和Flink SQL_从Kafka读取数据------------------------- 09:29
P072.尚硅谷_Flink-Table API和Flink SQL_表的查询转换------------------------------ 11:04
P073.尚硅谷_Flink-Table API和Flink SQL_DataStream和表的转换------------------- 08:25
P074.尚硅谷_Flink-Table API和Flink SQL_输出到文件----------------------------- 25:14
P075.尚硅谷_Flink-Table API和Flink SQL_更新模式------------------------------ 10:51
P076.尚硅谷_Flink-Table API和Flink SQL_Kafka管道测试-------------------------- 17:41
P077.尚硅谷_Flink-Table API和Flink SQL_输出到ES------------------------------- 18:18
P078.尚硅谷_Flink-Table API和Flink SQL_输出到MySQL---------------------------- 08:09
P079.尚硅谷_Flink-Table API和Flink SQL_表转换成流------------------------------ 11:34
P080.尚硅谷_Flink-Table API和Flink SQL_流处理和SQL查询的不同------------------ 07:07
P081.尚硅谷_Flink-Table API和Flink SQL_动态表和持续查询---------------------- 12:24
P082.尚硅谷_Flink-Table API和Flink SQL_持续查询示例具体过程----------------- 12:50
P083.尚硅谷_Flink-Table API和Flink SQL_时间特性(一)_处理时间----------------- 20:16
P084.尚硅谷_Flink-Table API和Flink SQL_时间特性(二)_事件时间------------------ 14:16
P085.尚硅谷_Flink-Table API和Flink SQL_窗口(一)_分组窗口--------------------- 13:11
P086.尚硅谷_Flink-Table API和Flink SQL_窗口(二)_分组窗口测试-------------------- 18:43
P087.尚硅谷_Flink-Table API和Flink SQL_窗口(三)_Over窗口----------------------- 11:58
P088.尚硅谷_Flink-Table API和Flink SQL_窗口(四)_Over窗口测试------------------------ 13:03
P089.尚硅谷_Flink-Table API和Flink SQL_函数(一)_系统内置函数---------------------- 11:04
P090.尚硅谷_Flink-Table API和Flink SQL_函数(二)_UDF函数_标量函数----------------- 14:39
P091.尚硅谷_Flink-Table API和Flink SQL_函数(三)_UDF函数_表函数--------------------- 17:19
P092.尚硅谷_Flink-Table API和Flink SQL_函数(四)_UDF函数_聚合函数---------------- 26:58
P093.尚硅谷_Flink-Table API和Flink SQL_函数(五)_UDF函数_表聚合函数------------- 27:56
P094.尚硅谷_Flink项目-电商用户行为分析_批处理和流处理以及项目选型--------------- 08:12
P095.尚硅谷_Flink项目-电商用户行为分析_用户行为分析应用场景---------------------- 15:27
P096.尚硅谷_Flink项目-电商用户行为分析_模块设计和数据分析------------------------ 09:12
P097.尚硅谷_Flink项目-电商用户行为分析_模块需求分析_实时热门商品统计(一)-------- 21:03
P098.尚硅谷_Flink项目-电商用户行为分析_模块需求分析_实时热门商品统计(二)--------- 09:07
P099.尚硅谷_Flink项目-电商用户行为分析_模块需求分析_其它需求------------------- 10:04
P100.尚硅谷_Flink项目-电商用户行为分析_项目框架搭建--------------------------------- 10:22
P101.尚硅谷_Flink项目-电商用户行为分析_实时热门商品统计(一)_窗口聚合-------------------- 27:55
P102.尚硅谷_Flink项目-电商用户行为分析_实时热门商品统计(二)_排序统计输出-------------------------- 27:14
P103.尚硅谷_Flink项目-电商用户行为分析_实时热门商品统计(三)_从Kafka消费数据测试------------------ 20:51
P104.尚硅谷_Flink项目-电商用户行为分析_实时热门商品统计(四)_批量消费Kafka数据测试---------------- 10:03
P105.尚硅谷_Flink项目-电商用户行为分析_实时热门商品统计(五)_Table API和SQL实现------------------- 28:43
P106.尚硅谷_Flink项目-电商用户行为分析_实时热门页面流量统计(一)_开窗聚合统计-------------------- 26:06
P107.尚硅谷_Flink项目-电商用户行为分析_实时热门页面流量统计(二)_统计结果排序输出----------------- 09:47
P108.尚硅谷_Flink项目-电商用户行为分析_实时热门页面流量统计(三)_乱序数据的处理------------------- 21:04
P109.尚硅谷_Flink项目-电商用户行为分析_实时热门页面流量统计(四)_保证状态更新结果正确-------------- 21:41
P110.尚硅谷_Flink项目-电商用户行为分析_PV统计(一)_基本实现--------------------------------------- 20:39
P111.尚硅谷_Flink项目-电商用户行为分析_PV统计(二)_数据并行的优化-------------------------------- 19:22
P112.尚硅谷_Flink项目-电商用户行为分析_UV统计(一)_基本实现-------------------------------------- 15:28
P113.尚硅谷_Flink项目-电商用户行为分析_UV统计(二)_布隆过滤器去重思路和程序架构------------------- 30:48
P114.尚硅谷_Flink项目-电商用户行为分析_UV统计(三)_布隆过滤器简单实现----------------------------- 09:12
P115.尚硅谷_Flink项目-电商用户行为分析_UV统计(四)_UV去重的布隆过滤器实现------------------------- 23:32
P116.尚硅谷_Flink项目-电商用户行为分析_APP市场推广统计(一)_自定义数据源------------------------- 17:03
P117.尚硅谷_Flink项目-电商用户行为分析_APP市场推广统计(二)_开窗聚合统计输出--------------------- 20:44
P118.尚硅谷_Flink项目-电商用户行为分析_广告点击量统计分析(一)_基本需求实现----------------------- 19:19
P119.尚硅谷_Flink项目-电商用户行为分析_广告点击量统计分析(二)_刷单行为过滤思路和整体框架--------- 14:28
P120.尚硅谷_Flink项目-电商用户行为分析_广告点击量统计分析(三)_刷单行为过滤代码实现-------------- 23:20
P121.尚硅谷_Flink项目-电商用户行为分析_恶意登录检测(一)_实现思路和代码框架-------------------- 18:17
P122.尚硅谷_Flink项目-电商用户行为分析_恶意登录检测(二)_具体代码实现--------------------------- 18:21
P123.尚硅谷_Flink项目-电商用户行为分析_恶意登录检测(三)_代码改进------------------------------- 18:19
P124.尚硅谷_Flink项目-电商用户行为分析_恶意登录检测(四)_CEP代码实现--------------------------- 30:33
P125.尚硅谷_Flink项目-电商用户行为分析_CEP简介(一)_CEP介绍及Pattern API整体概念---------------- 12:24
P126.尚硅谷_Flink项目-电商用户行为分析_CEP简介(二)_个体模式----------------------------------- 12:41
P127.尚硅谷_Flink项目-电商用户行为分析_CEP简介(三)_模式序列------------------------------------- 10:24
P128.尚硅谷_Flink项目-电商用户行为分析_CEP简介(四)_模式的检测和事件处理------------------------- 09:50
P129.尚硅谷_Flink项目-电商用户行为分析_订单超时检测(一)_实现思路和程序架构-------------------- 19:50
P130.尚硅谷_Flink项目-电商用户行为分析_订单超时检测(二)_CEP具体代码实现----------------------- 17:29
P131.尚硅谷_Flink项目-电商用户行为分析_订单超时检测(三)_流式输入数据测试-------------------- 06:42
P132.尚硅谷_Flink项目-电商用户行为分析_订单超时检测(四)_ProcessFunction代码实现------------- 32:20
P133.尚硅谷_Flink项目-电商用户行为分析_双流实时对账(一)_需求分析和整体架构-------------- 13:50
P134.尚硅谷_Flink项目-电商用户行为分析_双流实时对账(二)_合流代码实现------------------------ 22:24
P135.尚硅谷_Flink项目-电商用户行为分析_Join API(一)_Window Join--------------------------- 12:56
P136.尚硅谷_Flink项目-电商用户行为分析_Join API(二)_Interval Join-------------------------- 09:47
P137.尚硅谷_Flink项目-电商用户行为分析_双流实时对账(三)_Join代码实现----------------------- 09:22以上是关于[尚硅谷22版shiro]学习笔记的主要内容,如果未能解决你的问题,请参考以下文章