记录一次因内存设置导致flink运行时发生的错误

Apache Flink 是一个在有界数据流和无界数据流上进行有状态计算的分布式处理引擎和框架。Flink 设计旨在所有常见的集群环境中运行,以任意规模和内存级速度执行计算。Flink CDC 是一个基于流的数据集成工具,支持从数据库变更日志中(如binlog)读取记录进行无锁的增量数据处理。处理任务支持通过 Flink Connector 读取数据,也可以使用 Flink CDC Connector 读取数据。

错误场景描述:业务上对于开启了 binlog 的 MySQL 数据库默认使用 Flink CDC Connector 来读取数据,未开启 binlog 的数据库使用内置的 Flink Connector 读取数据。测试环境上的某个未开启 binlog 的 MySQL 数据库的任务平时可以正常运行,在没有修改代码的情况下突然无法启动了。

排查最后的结果:由于数据量较大,需要的内存较多,但 TaskManager 设置的内存过小,频繁GC导致任务无法正常运行。

Read More

MySQL索引与查询语句分析调优

索引(Index)是帮助 MySQL 高效获取数据的数据结构。除数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。在实际业务中合理设置索引可以提高语句查询的速度,大数据量未设置索引、不合理的语句、不当的数据库参数会导致慢 SQL 查询,从而导致接口响应变慢。

Read More

幻兽帕鲁搭建+内网穿透

最近游戏幻兽帕鲁大火,和朋友一起多人游戏用官方服务器有诸多限制,遂自建服务器,由于游戏需要较大的内存,租用各种云的大内存机器又太贵了,手头上又有符合要求的闲置电脑,考虑使用闲置电脑+内网穿透自建服务器。试了试免费的内网穿透效果不尽人意,尝试租用最便宜的云服务器+自建frp进行穿透。

Read More

MySQL Archive(Linux-Generic)安装

本文选择 TAR Archive(Linux-Generic) 包进行安装,好处是可以自定义安装目录以及环境变量,在单台服务器上启动多个MySQL实例。

不同操作系统的细节可能有所差异,但大致都是下载、解压、修改配置、初始化、修改root密码、按需创建账户和授权几个步骤。

Read More

卸载小米手机的广告服务

小米在手机系统中内置了广告,即使在系统设置中全局关闭广告,偶尔也会有少量的广告推送。 如果应用在小米商店上架时选择了加入“小米广告联盟”,
在打开相关应用时有概率出现双重开屏广告,或者经常出现莫名其妙的推送消息,但点进应用发现什么都没有(如京东优惠)。

这个双重开屏广告与应用的下载渠道无关,而是系统根据应用包名匹配是否加入广告联盟,是否有人在该应用投放开屏广告而决定的。
如果应用自己有开屏广告,且上架小米应用商店时加入了广告联盟,又恰好有人在广告联盟上对该应用投放了开屏广告,就会出现双重开屏广告的现象。

Read More

Maven依赖冲突引起的一些问题

在使用Maven构建的应用中,因为传递依赖的原因,最终选择的jar包可能因为依赖的新版本新增了方法或者不向下兼容,导致与项目不适配。所以在新引入或者更新了包之后,应用运行期可能会报 ClassNotFoundExceptionNoClassDefFoundErrorNoSuchMethodError 等异常或者错误,又或者不该同时存在的依赖出现(例如 log4j-to-slf4jlog4j-slf4j-impl),这时候就要考虑jar包冲突的问题,通过人工干预的方式来选择适配的依赖版本。

Read More

定时任务

定时器是操作系统的重要组成部分,它可以周期性的发出信号或中断,以便操作系统或其他应用程序可以在指定时间间隔内执行某些任务。在定时任务中,操作系统或应用程序会利用计时器或定时器定期检查当前时间是否为预定的执行时间,如果达到预定时间则执行任务。主流的操作系统提供了Crontab、Windows Task Scheduler 等管理工具。

Read More

Java基础——线程池

Java支持多线程,虽然启动一个新线程很容易,但是创建线程需要向操作系统申请资源,消耗大量时间,因此便有了线程池。线程池是池化技术的一种使用,池化技术指的是提前准备一定的资源,只要池中有足够的资源,在需要时可以随时从池中取出资源使用,使用完后将资源归还到池中。池化技术带来了显著的优点:主要是可重复使用资源,避免动态创建资源、释放资源带来的额外开销和等待时间。在服务器资源有限的情况下,使用池化技术可以提高资源的利用率,从而提升性能。池化技术比较典型的用途有:连接池、线程池、内存池、对象池。

Read More

Java基础——线程

进程和线程是操作系统中的两个基本概念,进程是操作系统中资源分配的基本单位,拥有独立的内存空间、资源和进程控制块;线程则是进程内的执行单元,是处理器调度的基本单位,不拥有系统资源,可以访问隶属于进程的资源。线程是进程的基本组成单位,一个程序至少有一个进程,一个进程至少有一个线程;线程之间可以共享内存和资源,从而提高程序的并发性和执行效率;在多核处理器系统中,多个线程可以在不同的核心上并行执行,充分利用计算机的资源。

Read More