使用StreamSets Data Collector实时同步oracle数据到kafka
一、前言
二、StreamSets Data Collector
简介
安装
1. 下载安装包
2. 解压
3. 在安装目录外新建文件夹放置configuration, data, log, and resource文件夹(官方推荐)
4. 修改配置文件
5. 将安装目录下etc中的所有文件拷贝到我们新建的conf目录下
6. 启动
三、StreamSets Data Collector实战:实时同步oracle数据到kafka
知识准备
Oracle准备
1. 启用LogMiner
2. 启用 Supplemental Logging
3. 创建用户
4. 提取LogMiner Dictionary到redo log (可选)
搭建Oracle到Kafka的Pipeline
1. 安装相关组件
2. 构建Pipeline
3. 测试
一、前言
最近收到需求,调研如何实时同步oracle数据到kafka,这里先做一个粗略的总结,然后简单介绍下如何使用StreamSets完成需求。 先说下我所知道的几种可行方案:
Oracle GoldenGate (OGG) 这个大家应该都知道吧,oracle自家产品,网上资料很多,缺点就是收费,今天先不聊。
flume-ng-sql-source. 这是github上一个开源工具,需要配合flume。大致过程是在flume中配置一个自定义查询语句custom.query,包含特定格式where incrementalField > $@$,只返回incrementalField增大的数据。incrementalField是你指定需要监控的字段,该字段增大了就代表有数据增加或改变,一般是create_time、update_time或自增id等字段。同时还需配置一个查询间隔query.delay,间隔一定时间执行上面定义的查询语句。 理论上只要把查询间隔设置得足够小,就可以基本做到近实时。但是这种主动查询获取数据的方式耗时耗资源,显然不合适实时计算,更适合离线,这里也就不深入研究了。 可参考: https://github.com/mvalleavila/flume-ng-sql-source https://www.jb51.net/article/144031.htm
Kafka Connect Oracle 这也是github上的开源工具(https://github.com/erdemcer/kafka-connect-oracle),现在还在更新。原理与今天要讲的StreamSets类似,都是通过Oracle的LogMiner获取数据库的增量和变量数据,仅支持oracle to kafka,有兴趣可以去了解下。
StreamSets Data Collector 今天的主角,下面介绍。
二、StreamSets Data Collector
简介
官网:https://streamsets.com/ 中文站:https://streamsets.com/(不确定是否是中文官网) StreamSets Data Collector是StreamSets下的一个子产品,先来一段中文站上的介绍感受下它的自信:
StreamSets Data Collector(SDC)是目前最先进的可视化数据采集配置工具,非常适合做实时的数据采集,兼顾批量数据采集和不落地的数据ETL。如果您正在使用Flume、Logstash、Sqoop、Canal等上一代数据采集工具,推荐您使用SDC作为升级替换。
它有以下几个特点:
方便 - 可通过可视化界面操作、拖拽构建数据管道(Pipeline),不需要写代码;在界面上还可实时查看数据流转情况。
功能强大 - 构建Pipeline的数据源(Origins)、处理器(Processors)和接收端(Destinations)支持非常丰富,基本包括了各种常见的组件,如HDFS、Kafka、MySQL、Oracle等。详细可见:Origins、Processors、Destinations
开源免费
安装
参考:https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Installation/Install_title.html StreamSets Data Collector提供了多种安装方式,这里演示第四种Core Installation,安装部分核心功能并手动启动,其他功能可按需在界面上操作安装。
1. 下载安装包
https://archives.streamsets.com/datacollector/3.15.0/tarball/activation/streamsets-datacollector-core-3.15.0.tgz
2. 解压
$> tar -zxvf streamsets-datacollector-core-3.15.0.tgz -C ~/
$> cd ~
$> mv streamsets-datacollector-3.15.0/ streamsets-datacollector/
3. 在安装目录外新建文件夹放置configuration, data, log, and resource文件夹(官方推荐)
$> cd ~
$> mkdir -p sdc/conf
$> mkdir -p sdc/data
$> mkdir -p sdc/log
$> mkdir -p sdc/resources
4. 修改配置文件
在安装目录下libexec/sdc-env.sh中指定conf、data、log和resources的路径,即上面我们新建的文件夹路径
$> vim ~/streamsets-datacollector/libexec/sdc-env.sh
export SDC_DATA=~/ sdc/ data
export SDC_LOG=~/ sdc/ sdc
export SDC_CONF=~/ sdc/ conf
export SDC_RESOURCES=~/ sdc/ resources
5. 将安装目录下etc中的所有文件拷贝到我们新建的conf目录下
$> cp ~/streamsets-datacollector/etc/* ~/sdc/conf/
6. 启动
$> cd ~/streamsets-datacollector
$> bin/streamsets dc
如果出现下面类似的内容则表示启动成功
Java 1. 8 detected; adding $SDC_JAVA8_OPTS of "-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Djdk.nio.maxCachedBufferSize=262144" to $SDC_JAVA_OPTS
Bypass activation because SDC contains only basic stage libraries.
Logging initialized @1028ms to org. eclipse. jetty. util. log. Slf4jLog
Running on URI : 'http://bigdata02:18630'
启动成功后就可以在浏览器访问StreamSets Data Collector的可视化界面了,地址就是上面最后一行的URI,用户名和密码都是admin
常见问题: Configuration of maximum open file limit is too low: 1024 (expected at least 32768). Please consult https://goo.gl/6dmjXd
解决办法: 在/etc/security/limits.conf文件末尾加上下面两行(不要漏了*),后面的数字大于32768就行:
* soft nofile 102400
* hard nofile 102400
断开系统终端,重新连接,然后再次启动streamset就可以了
三、StreamSets Data Collector实战:实时同步oracle数据到kafka
这里简单演示一个StreamSets Data Collector(SDC)中构建Pipeline的案例,实时同步oracle数据到kafka,用到的Origin是Oracle CDC Client,Destination是Kafka Producer,不使用Processor。SDC还有很多Origins和Destinations,可以构建出各种你想要的Pipeline,除了各个数据组件的自身配置可能会有差异,总体流程还是一样的。
Oracle CDC Client通过Oracle LogMiner解析redo logs获取变化数据信息,适合实时同步增量和变量数据。如果还想获取Oracle中的原始数据,可以使用JDBC Query Consumer或JDBC Multitable Consumer源另外再搭建一个单独的Pipeline。
Oracle CDC Client的使用可以参考: https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Origins/OracleCDC.html#concept_rs5_hjj_tw https://streamsets.com/blog/replicating-oracle-to-mysql-and-json/#ora-01291-missing-logfile
知识准备
因为涉及到Oracle CDC Client中的相关配置,这里简单科普一点Oracle redo log和LogMiner的相关知识(参考官网资料)。
Redo log是Oracle的操作记录日志,记录了所有对用户数据和数据字典的改变,用以备份和恢复数据。LogMiner是Oracle开发的日志挖掘工具,可以解析redo log,分析出对数据的DML和DDL操作。为了解析redo log,LogMinder需要用到一个字典(LogMiner dictionary)。LogMiner使用该字典来解析表名和字段名。如果没有字典,解析出来的表名和字段名就只是内部的object ID,数据是二进制码。
LogMiner可以从下面三个地方获取字典,有不同的效果和性能。
直接使用online catlog 。速度最快,但是无法获取DDL操作,一旦表结构更改,LogMiner将无法解析出可执行SQL。适用于表结构不会被修改的场景。
将字典提取到redo log文件中 。可以获取DDL操作,但是会消耗数据库资源,官网资料建议在非高峰时期进行提取操作。表结构改变后需要重新操作;在操作的时候不能进行表结构变更。
将字典提取到平面文件(Flag File)中。由于Oracle CDC Client配置中没有这个选项,这里就不介绍了,想了解可以查看官网资料
Oracle CDC Client中需要配置LogMiner dictionary来源,提供了online catlog和redo log两个选项。对于这两个选项,官方文档提示:
Important: When using the dictionary in redo logs, make sure to extract the latest dictionary to the redo logs each time table structures change. Note that using the dictionary in redo logs can have significantly higher latency than using the dictionary in the online catalog. But using the online catalog does not allow for schema changes.
就是说: a. 如果使用redo logs中的字典,那在每次表结构改变后需要重新将字典提取到redo logs中。 b. 效率上,使用redo logs中的字典会比使用online catlog中的字典有更高的延迟,但是使用online catlog中的字典无法获取表结构更改。 需要自己根据需求取舍。
Oracle准备
1. 启用LogMiner
a. 使用有DBA权限的用户登录Oracle b. 检查数据库日志模式
SQL > select log_mode from v$database ;
如果结果是ARCHIVELOG,可以转至Task2。 如果结果是NOARCHIVELOG,执行下面SQL命令
SQL > shutdown immediate;
SQL > startup mount;
SQL > alter database archivelog;
SQL > alter database open ;
2. 启用 Supplemental Logging
为了从日志里获取数据,LogMiner需要启用数据库或表的supplemental logging。Supplemental logging又分为 identification key logging和full supplemental logging。Identification key logging只包含主键和发生改变的字段数据,而full supplemental logging包含了所有字段的数据,这两种根据需求选择一种即可。
a. 启用Identification key logging或full supplemental logging 如果你的Oracle版本是12c 或 18c multitenant,最好是为表容器启用日志,而不是整个数据库。
ALTER SESSION SET CONTAINER=;
启用Identification key logging 可以指定一张表启用
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER TABLE . ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
也可以同时为数据库中所有表启用
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
启用full supplemental logging 指定一张表启用
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER TABLE . ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
为数据库中所有表启用
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
b. 提交修改
ALTER SYSTEM SWITCH LOGFILE;
为了方便,我这里直接为所有表启用full supplemental logging。这里还是需要DBA用户操作。
SQL > ALTER DATABASE ADD SUPPLEMENTAL LOG DATA ( ALL ) COLUMNS ;
SQL > ALTER SYSTEM SWITCH LOGFILE;
3. 创建用户
在CDC Client源中需要配置账户信息连接Oracle,要求该用户有一定权限,所以这里新建一个用户。不同的Oracle版本有不同的方式。
Oracle 12c或18c 多租户版本
ALTER SESSION SET CONTAINER=cdb$root;
CREATE USER IDENTIFIED BY CONTAINER=all;
GRANT create session, alter session, set container, logmining, execute_catalog_role TO CONTAINER=all;
GRANT select on GV_$DATABASE to ;
GRANT select on V_$LOGMNR_CONTENTS to ;
GRANT select on GV_$ARCHIVED_LOG to ;
ALTER SESSION SET CONTAINER=;
GRANT select on . TO ;
Oracle 12c或18c标准版本
CREATE USER IDENTIFIED BY ;
GRANT create session, alter session, logmining, execute_catalog_role TO ;
GRANT select on GV_$DATABASE to ;
GRANT select on V_$LOGMNR_CONTENTS to ;
GRANT select on GV_$ARCHIVED_LOG to ;
GRANT select on . TO ;
Oracle 11g
CREATE USER IDENTIFIED BY ;
GRANT create session, alter session, execute_catalog_role, select any transaction, select any table to ;
GRANT select on GV_$DATABASE to ;
GRANT select on GV_$ARCHIVED_LOG to ;
GRANT select on V_$LOGMNR_CONTENTS to ;
GRANT select on . TO ;
我的是Oracle 11g,创建TEST_SDC用户,密码为123456。注意,这里同样需要使用具有DBA权限的用户操作。
SQL > create user TEST_SDC identified by 123456 ;
SQL > grant create session , alter session , execute_catalog_role, select any transaction , select any table to TEST_SDC;
SQL > grant select on GV_$ARCHIVED_LOG to TEST_SDC;
SQL > grant select on V_$LOGMNR_CONTENTS to TEST_SDC;
4. 提取LogMiner Dictionary到redo log (可选)
当你希望LogMiner使用来自redo log中的字典时,需要执行此步骤,将字典提取到redo log中,且必须在启动pipeline之前执行。如果使用online catlog中的字典,则不需要。
如果oracle版本是11g、12c或者18c,执行下面的的命令:
EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
如果是12c或者18c多租户版本
ALTER SESSION SET CONTAINER=cdb$root;
EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
搭建Oracle到Kafka的Pipeline
1. 安装相关组件
由于我安装的StreamSets Data Collector(SDC)是基础(core)版本,不包含oracle和kafka相关的组件,所以这里需要单独安装。如果是Full Installation应该就不需了,应该会包含所有的Origins和Destinations,但这个安装包太大了,我没有尝试。
为了对接oracle和kafka,这里需要在SDC里面安装JDBC和CDH Kafka 4.1.0(里面还有个Apache Kafka,但是一直没有安装成功)。安装方法有很多种,可以使用RPM或命令行安装,也可以在SDC管理界面中的Package Manager安装,可以参考官方教程Install Additional Stage Libraries。我这里演示使用Package Manager安装。
进入Package Manager
安装JDBC
第一次安装需要注册,按要求填好信息并进入邮箱验证就可以了。 需要注意的是,安装过程可能会因为网络原因安装失败,想再次安装的时候会报错,提示已经安装了。这时候需要去到SDC安装目录下的streamsets-libs中,把刚刚安装失败组件的文件夹删掉,然后在重新安装。
安装Kafka
安装JDBC驱动
JDBC驱动需要通过安装外部安装包的方式安装,可以参考官方教程。
新建个文件夹,作为外部包的安装路径
$> mkdir ~/ sdc/ external- libs
在~/streamsets-datacollector/libexec/sdc-env.sh中加入配置,将替换成你刚刚新建的文件夹路径:
export STREAMSETS_LIBRARIES_EXTRA_DIR="-"
在~/sdc/conf/sdc-security.policy中添加:
// user-defined external directory
grant codebase "file:///--" {
permission java.security.AllPermission;
};
下载JDBC驱动,我的是oracle 11g,下载的是ojdbc6,下载地址https://www.oracle.com/database/technologies/jdbcdriver-ucp-downloads.html
安装 重启SDC。
2. 构建Pipeline
新建Pipeline
create new pipeline -> 填写Title -> Save
Select Origin,选择Oracle CDC Client -> Select Destination,选择Kafka Producer
配置Pipeline 这里可以配置一些pipeline的信息,如名称、执行模式(Standalone、Cluster)等。有一个必须用户指定的配置就是错误数据处理。可以忽略、写入到文件或者写入到其他pipeline等。我这里为了方便直接忽略了。
配置Oracle CDC Client
这里只说明一些必须的配置项,其他配置项没有测试,详细说明参考官网。
Oracle CDC
Tables 需要采集数据的数据库表,可以填写多张表;每张表需要填写schema和table name;也可以通过在table name中填写表达式来匹配多张表; 我这里使用了SCOTT用户下面的EMP和DEPT两张表做测试。
Dictionary Source 选择LogMiner中字典的来源,有Online Catalog和Redo Logs两个选项; 我使用的是Online Catalog。
DB Time Zone 数据库服务器所在的时区,可以使用select dbtimezone from dual查看。
JDBC
JDBC Connection String JDBC连接Oracle的字符串,根据自己的数据库情况填写
Credentials
Username 连接数据库的用户名;用我们上面创建的用户TEST_SDC
Password 连接数据库的密码;用我们上面创建的用户密码123456
其他配置使用默认就行。
配置Kafka
这里只是简单配置,更详细内容可以参考官网。
Kafka
Broker URI Kafka集群地址。我的是bigdata01:9092,bigdata02:9092,bigdata03:9092
Topic 需要将数据写入哪个Topic。我的是oracle2kafka。
3. 测试
启动pipeline。 直接在pipeline界面点击start按钮。
启动kafka消费端
$> kafka-console-consumer
--bootstrap-server bigdata01:9092,bigdata02:9092,bigdata03:9092
--topic oracle2kafka
bootstrap-server与topic参数必须与上面kafka中配置相同。
测试
这里分别向上面配置过的两张表SCOTT.EMP和SCOTT.DEPT插入数据。这里一定要记得commit。
SQL > insert into SCOTT. DEPT values ( 65 , 'a' , 'b' ) ;
SQL > commit ;
SQL > insert into scott. emp values ( 1234 , 'Mike' , 'SALESMAN' , 7698 , '' , 1500 , 0 , 30 ) ;
SQL > commit ;
在pipeline页面上可以看到输入了2条数据,输出了2条数据,有0条错误。
在kafka的消费端也可以看到刚刚插入数据库的2条数据
至此,oracle到kafka的pipeline就搭建完成了。
你可能感兴趣的:(大数据,kafka,大数据)
Deepseek技术深化:驱动大数据时代颠覆性变革的未来引擎
荣华富贵8
spring boot 搜索引擎 后端 缓存 redis
在大数据时代,信息爆炸和数据驱动的决策逐渐重塑各行各业。作为一项前沿技术,Deepseek正在引领新一轮技术革新,颠覆传统数据处理与分析方式。本文将从理论原理、应用场景和前沿代码实践三个层面,深入剖析Deepseek技术如何为大数据时代提供颠覆性变革的解决方案。一、技术背景与核心思想1.1大数据挑战与机遇在数据量呈指数级增长的背景下,传统数据处理方法面临数据存储、计算效率和信息提取精度的诸多挑战。
大数据之路:阿里巴巴大数据实践——大数据领域建模综述
为什么需要数据建模核心痛点数据冗余:不同业务重复存储相同数据(如用户基础信息),导致存储成本激增。计算资源浪费:未经聚合的明细数据直接参与计算(如全表扫描),消耗大量CPU/内存资源。数据一致性缺失:同一指标在不同业务线的口径差异(如“活跃用户”定义不同),引发决策冲突。开发效率低下:每次分析需重新编写复杂逻辑,无法复用已有模型。数据建模核心价值性能提升:分层设计(ODS→DWD→DWS→ADS)
大数据技术笔记—spring入门
卿卿老祖
篇一spring介绍spring.io官网快速开始Aop面向切面编程,可以任何位置,并且可以细致到方法上连接框架与框架Spring就是IOCAOP思想有效的组织中间层对象一般都是切入service层spring组成前后端分离已学方式,前后台未分离:Spring的远程通信:明日更新创建第一个spring项目来源:科多大数据
大数据精准获客并实现高转化的核心思路和实现方法
2401_88470328
大数据精准获客 数据分析 数据挖掘 大数据 需求分析 big data
大数据精准获客并实现高转化的核心思路和实现方法大数据精准获客并实现高转化的核心思路和实现方法在当今信息爆炸的时代,企业如何通过海量的数据精准获取潜在客户,并提高转化率,已经成为营销策略中的关键环节。大数据精准获客的核心思路在于数据驱动、多渠道触达以及优化转化路径,从而实现高效的市场推广和客户转化。数据驱动原理和机制数据驱动的核心在于通过分析用户行为数据,挖掘潜在客户的需求和喜好,从而制定更加精准的
一地鸡毛—一个中年男人的日常2021241
随止心语所自欲律
2021年8月31日,星期二,阴有小雨。早起5:30,跑步10公里。空气清新,烟雨朦胧,远山如黛,烟雾缭绕,宛若仙境。空气中湿气很大,朦胧细雨拍打在脸上,甚是舒服,跑步的人明显减少。早上开会,领导说起逐年大幅度下滑的工作业绩,越说越激动,说得脸红脖子粗。开完会又讨论了一下会议精神,心情也有波动,学习热情不高。心里还有一个大事,是今日大数据分析第1次考试,因自己前期没学,而且计算机编程方面没有任何基
Hive详解
一:Hive的历史价值1,Hive是Hadoop上的KillerApplication,Hive是Hadoop上的数据仓库,Hive同时兼具有数据仓库中的存储引擎和查询引擎的作用;而SparkSQL是一个更加出色和高级的查询引擎,所以在现在企业级应用中SparkSQL+Hive成为了业界使用大数据最为高效和流行的趋势。2,Hive是Facebook的推出,主要是为了让不动Java代码编程的人员也能
智慧施工:AI技术赋能建筑安全监测新纪元
开发AI智能应用,就下载InsCodeAIIDE,一键接入DeepSeek-R1满血版大模型!智慧施工:AI技术赋能建筑安全监测新纪元在现代建筑行业中,施工安全始终是核心关注点之一。随着科技的飞速发展,人工智能(AI)和大数据分析逐渐成为提升施工安全的重要工具。本文将探讨如何利用智能化软件和大模型API来构建高效的施工安全监测系统,并介绍一款强大的开发工具——InsCodeAIIDE的应用场景及其
智慧工地系统:建筑行业数字化变革的引领者
青云智慧园区
java
在建筑行业积极迈向数字化转型的浪潮中,智慧工地系统凭借“数据驱动、智能管控、协同增效”的核心优势,深度融合物联网、大数据、人工智能等前沿技术,构建起覆盖工程项目全生命周期的精细化管理体系。以下将从系统架构、核心功能模块、应用价值以及未来展望等方面,全方位剖析智慧工地系统如何实现施工全过程的智能化、高效化管理。一、系统架构:打造一体化协同管理平台智慧工地系统采用先进的分层架构设计,以底层的数据采集层
Hive与Hudi集成:增量大数据处理方案
AI大数据智能洞察
大数据与AI人工智能 大数据AI应用 hive hadoop 数据仓库 ai
Hive与Hudi集成:增量大数据处理方案关键词:Hive、Hudi、增量大数据处理、数据集成、数据湖摘要:本文主要探讨了Hive与Hudi集成的增量大数据处理方案。我们将深入了解Hive和Hudi的核心概念,剖析它们之间的关系,详细阐述集成的算法原理与操作步骤,通过实际项目案例展示如何进行开发环境搭建、代码实现与解读。同时,会介绍该集成方案的实际应用场景、相关工具和资源,探讨未来发展趋势与挑战。
OpenSIPS 邂逅 Kafka:构建高效 VoIP 消息处理架构
c_zyer
opensips SIP 消息队列 kafka opensips voip
使用场景使用步骤引入模块组装&发送数据消费数据故障转移使用场景异步日志处理:将OpenSIPS中的SIP信令日志、通话记录(CDR)等数据发送到Kafka队列中。事件通知与监控:利用OpenSIPS的event_interface模块将SIP事件(如呼叫建立、断开、注册等)推送到KafkaOpenSIPS中事件接口有以下类型:EVENT_DATAGRAM-PublishJSON-RPCnotifi
获取三网实时访客---无忧获客大数据
无牛_abc3
很多传统行业的公司与企业对于运营商大数据的理解还是很基础的,大多数都是在买资源程度的认识。一些敢于尝试运营商大数据获客的传统企业自然会受益颇多。运营商大数据所提供的获客服务也非常简单,就是将自身的用户数据资源、针对不同的企业去制定有个性化需求的获客标准,运营商大数据根据不同的企业,和行业去进行精准客户的部署和分配,让相关合作的企业通过运营商提供的CRM平台进行一个有效的触达。运营商大数据已经在全国
Kafka事务机制详解
一碗黄焖鸡三碗米饭
Kafka全景解析 kafka 分布式 Java 副本 事务 分区 大数据
目录Kafka事务机制详解1.Kafka中的事务概述2.Kafka事务的基本概念2.1精确一次处理(ExactlyOnceSemantics,EOS)2.2Kafka事务的工作流程3.Kafka事务的配置与使用3.1生产者端的事务配置3.2消费者端的事务配置4.Kafka事务的优势与限制4.1Kafka事务的优势4.2Kafka事务的限制5.总结在分布式系统中,事务性操作(如数据库事务)是非常重要
DeepSeek在大数据领域正掀起一场深刻的变革
智海观潮
AI 大数据 deepseek AI
随着人工智能技术的飞速发展,DeepSeek作为一款行业领先的开源大模型,正在大数据领域掀起一场深刻的变革。其强大的数据处理和分析能力,为各行业带来了新的机遇和变革,推动数据与业务的深度融合。以下是DeepSeek在大数据领域的一些典型的潜在应用:1.加速数据处理与分析流程在传统的大数据应用中,数据收集、预处理和分析往往是一个繁琐且耗时的工程。DeepSeek凭借其高效的算法和强大的计算能力,极大
kafka的ISR机制详解
inori1256
kafka 分布式
Kafka的ISR机制ISR(In-SyncReplicas同步副本集)机制是一种用于确保数据可靠性和一致性的重要机制。一、ISR的定义ISR是指与Kafka分区中的Leader副本保持同步的Follower副本集合。这些副本已经复制了Leader副本的所有数据,并且它们的落后时间在一定范围内,因此被认为是可靠的、可以用于故障转移和数据恢复的副本。二、ISR的作用数据复制:当消息被写入Kafka的
一句话读懂Kafka:5W1H带你解锁分布式消息队列的奥密
落霞归雁
AI编程 教育电商 微信开放平台 rabbitmq 中间件
一句话读懂Kafka:5W1H带你解锁分布式消息队列的奥秘在当今数字化时代,消息队列(MessageQueue,简称MQ)已经成为分布式系统中不可或缺的组件,而ApacheKafka作为其中的佼佼者,以其卓越的性能和广泛的应用场景脱颖而出。今天,就让我们用一句话读懂Kafka,并通过5W1H(What、Why、Who、When、Where、How)的方式,深入剖析它的核心价值与技术魅力。一句话读懂
Kafka——两种集群搭建详解 k8s
Michaelwubo
kafka 分布式
1、简介Kafka是一个能够支持高并发以及流式消息处理的消息中间件,并且Kafka天生就是支持集群的,今天就主要来介绍一下如何搭建Kafka集群。Kafka目前支持使用Zookeeper模式搭建集群以及KRaft模式(即无Zookeeper)模式这两种模式搭建集群,这两种模式各有各的好处,今天就来分别介绍一下这两种方式1.1、Kafka集群中的节点类型一个Kafka集群是由下列几种类型的节点构成的
零基础学习性能测试第九章:全链路追踪-系统中间件节点监控
试着
性能测试 学习 中间件 性能测试 零基础
目录一、为什么需要监控中间件节点?二、主流中间件监控方案1.监控体系架构2.监控工具矩阵三、环境搭建实战1.部署Prometheus2.部署Grafana四、中间件监控配置实战1.Nginx监控2.Redis监控3.Kafka监控4.MySQL监控五、全链路追踪中的中间件监控1.SkyWalking与Prometheus集成2.全链路视角的中间件监控六、性能瓶颈定位实战1.瓶颈分析流程图2.典型瓶
IoTDB智能分析节点AINode:时序数据分析的新引擎
时序数据说
iotdb 数据分析 数据挖掘 时序数据库 数据库 大数据 ai
在大数据与物联网的驱动下,时序数据处理需求激增,如何高效存储、管理并实时分析海量时序数据成为技术挑战。作为专为时序数据设计的数据库,IoTDB通过引入智能分析节点(AINode),将机器学习能力原生集成到数据库中,实现了“数据存储-分析-决策”的一体化闭环。本文将深入解析AINode的核心功能、技术优势及实际应用场景。AINode:IoTDB的智能分析引擎AINode是IoTDB推出的第三种内生节
Python爬虫【五十八章】Python数据清洗与分析全攻略:从Pandas到深度学习的异常检测进阶
程序员_CLUB
Python入门到进阶 python 爬虫 pandas
目录背景与需求分析第一章:结构化数据清洗实战(Pandas核心技法)1.1数据去重策略矩阵1.2智能缺失值处理体系第二章:深度学习异常检测进阶2.1自动编码器异常检测(时序数据)2.2图神经网络异常检测(关系型数据)第三章:综合案例实战案例1:金融交易反欺诈系统案例2:工业传感器异常检测第四章:性能优化与工程实践4.1大数据处理加速技巧4.2模型部署方案第五章:方法论总结与展望5.1方法论框架5.
《剑指offer》-算法篇-排序
小新学习屋
数据结构与算法 算法 leetcode 职场和发展 数据结构与算法
题目最小的K个数数组中的逆序对代码实现最小的K个数题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路:按照各种排序算法,找到排序结果的前K个数。思路1:最简单的方案,对数组进行排序,取最小的k个思路2:借鉴快速排序的思想,找partition的基准点povit,比较povit和k值的大小思路3:大数据处理的思想,
ZooKeeper在Hadoop中的协同应用:从NameNode选主到分布式锁实现
码字的字节
hadoop布道师 分布式 zookeeper hadoop 分布式锁
Hadoop与ZooKeeper概述Hadoop与ZooKeeper在大数据生态系统中的核心位置和交互关系Hadoop的架构与核心组件作为大数据处理的基石,Hadoop生态系统由多个关键组件构成。其核心架构主要包含HDFS(HadoopDistributedFileSystem)和YARN(YetAnotherResourceNegotiator)两大模块。HDFS采用主从架构设计,由NameNo
优查查PROB版本使用介绍,优查查官网查询入口
无忧达人
优查查最新版本PROB版本上线,优查查PROB版本的查询报告更全面,同时价格还是以前的价格,优查查大数据信用查询一次的价格是30,当然这个价格只限本文介绍的渠道,渠道我会放在文末,大家自行获取即可。优查查使用起来非常的流程,可以快速查询出来我们自身有没有信用稳定,优查查官网查询入口,每个人都可以使用优查查一键查询自己的信用,只能查询自己的信用,别人的信用是查询不了的。优查查使用入口放在文末了,划到
贝融助手要交68块钱查询是合理吗?其实是很多人搞错查询渠道了
无忧达人
我们都知道查询信用的平台都是需要收费,具体的收费每个平台都是不一样的,目前行业中收费基本上都是在30-100,其中大平台的收费会低一些,因为体量大可以降低自身的营业成本,这个原理和其它行业一样。贝融助手查询大数据信用收费是30(本文介绍的渠道),这个价格得益于贝融助手平台的体量,已经把价格做的非常低了,像信用行业大平台的价格基本上都是趋于行业的平均值,太高了太低了都不是正常值。贝融助手查询入口放在
深度评测:拼多多官方返利APP vs 其他返利平台,谁更胜一筹?
日常购物技巧呀
购物新宠儿!拼多多官方返利APP,引领智能返利新时代。随着科技的不断发展智能化已经成为了各个领域的发展趋势。在返利领域也不例外拼多多官方返利app凭借其强大的智能技术和创新能力正引领着智能返利新时代。这款app通过大数据分析用户行为习惯精准推送符合用户需求的商品和优惠信息。让你在享受智能化服务的同时也能获得更加精准的返利回报。在繁多的返利app中,高省app凭借其独特的优势脱颖而出,成为众多用户的
Kafka 去 ZooKeeper 化实战:KRaft 架构高可用部署实践与运维提升之道
derek2026
部署实践 kafka 运维 持续部署
Kafka去ZooKeeper化实战:KRaft架构高可用部署实践与运维提升之道一、为什么选择Kafka-Kraft架构?Kafka作为分布式消息系统的标杆,长期依赖ZooKeeper进行元数据管理。但Kafka-Kraft模式通过引入自管理的元数据仲裁机制,彻底摆脱了ZooKeeper依赖,带来三大核心优势:部署简化:减少运维组件,降低系统复杂度性能提升:元数据操作延迟降低40%稳定性增强:消除
链表也能整容?聊聊‘重排链表’的那些小技巧与深层逻辑
Echo_Wish
LeetCode极客营 链表 数据结构
“链表也能整容?聊聊‘重排链表’的那些小技巧与深层逻辑”今天我们不聊大数据,不聊AI,咱回归算法的“原点”——链表。别看它简单,里面的很多技巧在面试、在工程开发里都能救你一命。今天我就带你聊聊重排链表(ReorderList),以及它背后的思路和一些值得深挖的细节。1.先说说“重排链表”到底是啥?简单来说:给你一个单链表,比如:1->2->3->4->5要求你把它重新排列成:1->5->2->4-
朋友圈点赞也能造假?社交媒体数据欺诈识别的那些事
“朋友圈点赞也能造假?社交媒体数据欺诈识别的那些事”咱们先聊个现实点的:你刷朋友圈、微博、抖音的时候,有没有发现一些账号的点赞数、评论数特别整齐划一?要么都是那种无意义的“支持”“666”,要么一夜之间视频播放量暴涨,看着就不太对劲。其实,这背后很可能就是数据欺诈,而且这种现象在社交媒体上特别常见。作为一个做大数据分析的人,我最直观的感受就是:社交媒体上的数据从来不是完全干净的,里面水分多得很。如
好用的酒店预订软件有哪些?酒店预订哪个软件便宜
好项目高省
哪个酒店预订App更省钱?想要预订酒店却担心价格过高?试试这些超值的酒店预订App吧!【美团】:专注于三四线城市,性价比超高!经济型酒店最受欢迎,但用户忠诚度稍低。【飞猪】:阿里旗下平台,依托强大系统和大数据。受年轻人喜爱,但产品同质化较突出,需注意商家管控和用户纠纷解决。要领取优惠券,我们需要使用APP或者登录官方网站。在进入APP后,我们可以通过以下几种途径来获取内部优惠券。一、直返直返的口号
大数据量查询计算引发数据库CPU告警问题复盘
懒虫虫~
业务解决方案 大表治理
大数据量查询计算引发数据库CPU告警问题复盘一、背景二、根因分析三、解决方案方案1:多线程+缓存方案2:利用中间表+缓存四、总结一、背景2025年7月份某天,CDP系统每天不定时推送我们的Portal服务,生产环境运营看板会展示统计数据,发现接口响应缓慢,随之而来数据库监控告警,发现数据库CPU达到了80%。由于表数据量大,计算统计复杂,多线程使用不当,导致数据库服务器爆表。其中A表数据量达到1亿
RocketMQ常见问题梳理
kk在加油
rocketmq
MQ常见问题深度剖析:消息不丢失、顺序性、幂等性与积压处理本文基于RocketMQ核心原理,结合Kafka/RabbitMQ对比,深入分析MQ四大核心问题解决方案一、消息不丢失保障机制消息丢失风险点跨网络传输:生产者→Broker、Broker→消费者、主从同步Broker缓存机制:PageCache异步刷盘导致数据未持久化极端故障:整个MQ集群宕机生产者保证方案1.发送确认机制//RocketM
mongodb3.03开启认证
21jhf
mongodb
下载了最新mongodb3.03版本,当使用--auth 参数命令行开启mongodb用户认证时遇到很多问题,现总结如下:
(百度上搜到的基本都是老版本的,看到db.addUser的就是,请忽略)
Windows下我做了一个bat文件,用来启动mongodb,命令行如下:
mongod --dbpath db\data --port 27017 --directoryperdb --logp
【Spark103】Task not serializable
bit1129
Serializable
Task not serializable是Spark开发过程最令人头疼的问题之一,这里记录下出现这个问题的两个实例,一个是自己遇到的,另一个是stackoverflow上看到。等有时间了再仔细探究出现Task not serialiazable的各种原因以及出现问题后如何快速定位问题的所在,至少目前阶段碰到此类问题,没有什么章法
1.
package spark.exampl
你所熟知的 LRU(最近最少使用)
dalan_123
java
关于LRU这个名词在很多地方或听说,或使用,接下来看下lru缓存回收的实现
1、大体的想法
a、查询出最近最晚使用的项
b、给最近的使用的项做标记
通过使用链表就可以完成这两个操作,关于最近最少使用的项只需要返回链表的尾部;标记最近使用的项,只需要将该项移除并放置到头部,那么难点就出现 你如何能够快速在链表定位对应的该项?
这时候多
Javascript 跨域
周凡杨
JavaScript jsonp 跨域 cross-domain
 
linux下安装apache服务器
g21121
apache
安装apache
下载windows版本apache,下载地址:http://httpd.apache.org/download.cgi
1.windows下安装apache
Windows下安装apache比较简单,注意选择路径和端口即可,这里就不再赘述了。 2.linux下安装apache:
下载之后上传到linux的相关目录,这里指定为/home/apach
FineReport的JS编辑框和URL地址栏语法简介
老A不折腾
finereport web报表 报表软件 语法总结
JS编辑框:
1.FineReport的js。
作为一款BS产品,browser端的JavaScript是必不可少的。
FineReport中的js是已经调用了finereport.js的。
大家知道,预览报表时,报表servlet会将cpt模板转为html,在这个html的head头部中会引入FineReport的js,这个finereport.js中包含了许多内置的fun
根据STATUS信息对MySQL进行优化
墙头上一根草
status
mysql 查看当前正在执行的操作,即正在执行的sql语句的方法为:
show processlist 命令
mysql> show global status;可以列出MySQL服务器运行各种状态值,我个人较喜欢的用法是show status like '查询值%';一、慢查询mysql> show variab
我的spring学习笔记7-Spring的Bean配置文件给Bean定义别名
aijuans
Spring 3
本文介绍如何给Spring的Bean配置文件的Bean定义别名?
原始的
<bean id="business" class="onlyfun.caterpillar.device.Business">
<property name="writer">
<ref b
高性能mysql 之 性能剖析
annan211
性能 mysql mysql 性能剖析 剖析
1 定义性能优化
mysql服务器性能,此处定义为 响应时间。
在解释性能优化之前,先来消除一个误解,很多人认为,性能优化就是降低cpu的利用率或者减少对资源的使用。
这是一个陷阱。
资源时用来消耗并用来工作的,所以有时候消耗更多的资源能够加快查询速度,保持cpu忙绿,这是必要的。很多时候发现
编译进了新版本的InnoDB之后,cpu利用率上升的很厉害,这并不
主外键和索引唯一性约束
百合不是茶
索引 唯一性约束 主外键约束 联机删除
目标;第一步;创建两张表 用户表和文章表
第二步;发表文章
1,建表;
---用户表 BlogUsers
--userID唯一的
--userName
--pwd
--sex
create
线程的调度
bijian1013
java 多线程 thread 线程的调度 java多线程
1. Java提供一个线程调度程序来监控程序中启动后进入可运行状态的所有线程。线程调度程序按照线程的优先级决定应调度哪些线程来执行。
2. 多数线程的调度是抢占式的(即我想中断程序运行就中断,不需要和将被中断的程序协商)
a) 
查看日志常用命令
bijian1013
linux 命令 unix
一.日志查找方法,可以用通配符查某台主机上的所有服务器grep "关键字" /wls/applogs/custom-*/error.log
二.查看日志常用命令1.grep '关键字' error.log:在error.log中搜索'关键字'2.grep -C10 '关键字' error.log:显示关键字前后10行记录3.grep '关键字' error.l
【持久化框架MyBatis3一】MyBatis版HelloWorld
bit1129
helloworld
MyBatis这个系列的文章,主要参考《Java Persistence with MyBatis 3》。
样例数据
本文以MySQL数据库为例,建立一个STUDENTS表,插入两条数据,然后进行单表的增删改查
CREATE TABLE STUDENTS
(
stud_id int(11) NOT NULL AUTO_INCREMENT,
【Hadoop十五】Hadoop Counter
bit1129
hadoop
1. 只有Map任务的Map Reduce Job
File System Counters
FILE: Number of bytes read=3629530
FILE: Number of bytes written=98312
FILE: Number of read operations=0
FILE: Number of lar
解决Tomcat数据连接池无法释放
ronin47
tomcat 连接池 优化
近段时间,公司的检测中心报表系统(SMC)的开发人员时不时找到我,说用户老是出现无法登录的情况。前些日子因为手头上 有Jboss集群的测试工作,发现用户不能登录时,都是在Tomcat中将这个项目Reload一下就好了,不过只是治标而已,因为大概几个小时之后又会 再次出现无法登录的情况。
今天上午,开发人员小毛又找到我,要我协助将这个问题根治一下,拖太久用户难保不投诉。
简单分析了一
java-75-二叉树两结点的最低共同父结点
bylijinnan
java
import java.util.LinkedList;
import java.util.List;
import ljn.help.*;
public class BTreeLowestParentOfTwoNodes {
public static void main(String[] args) {
/*
* node data is stored in
行业垂直搜索引擎网页抓取项目
carlwu
Lucene Nutch Heritrix Solr
公司有一个搜索引擎项目,希望各路高人有空来帮忙指导,谢谢!
这是详细需求:
(1) 通过提供的网站地址(大概100-200个网站),网页抓取程序能不断抓取网页和其它类型的文件(如Excel、PDF、Word、ppt及zip类型),并且程序能够根据事先提供的规则,过滤掉不相干的下载内容。
(2) 程序能够搜索这些抓取的内容,并能对这些抓取文件按照油田名进行分类,然后放到服务器不同的目录中。
[通讯与服务]在总带宽资源没有大幅增加之前,不适宜大幅度降低资费
comsci
资源
降低通讯服务资费,就意味着有更多的用户进入,就意味着通讯服务提供商要接待和服务更多的用户,在总体运维成本没有由于技术升级而大幅下降的情况下,这种降低资费的行为将导致每个用户的平均带宽不断下降,而享受到的服务质量也在下降,这对用户和服务商都是不利的。。。。。。。。
&nbs
Java时区转换及时间格式
Cwind
java
本文介绍Java API 中 Date, Calendar, TimeZone和DateFormat的使用,以及不同时区时间相互转化的方法和原理。
问题描述:
向处于不同时区的服务器发请求时需要考虑时区转换的问题。譬如,服务器位于东八区(北京时间,GMT+8:00),而身处东四区的用户想要查询当天的销售记录。则需把东四区的“今天”这个时间范围转换为服务器所在时区的时间范围。
readonly,只读,不可用
dashuaifu
js jsp disable readOnly readOnly
readOnly 和 readonly 不同,在做js开发时一定要注意函数大小写和jsp黄线的警告!!!我就经历过这么一件事:
使用readOnly在某些浏览器或同一浏览器不同版本有的可以实现“只读”功能,有的就不行,而且函数readOnly有黄线警告!!!就这样被折磨了不短时间!!!(期间使用过disable函数,但是发现disable函数之后后台接收不到前台的的数据!!!)
LABjs、RequireJS、SeaJS 介绍
dcj3sjt126com
js Web
LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行。LABjs 通过优雅的语法(script 和 wait)实现了这两大特性,核心价值是性能优化。LABjs 是一个文件加载器。RequireJS 和 SeaJS 则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更
[应用结构]入口脚本
dcj3sjt126com
PHP yii2
入口脚本
入口脚本是应用启动流程中的第一环,一个应用(不管是网页应用还是控制台应用)只有一个入口脚本。终端用户的请求通过入口脚本实例化应用并将将请求转发到应用。
Web 应用的入口脚本必须放在终端用户能够访问的目录下,通常命名为 index.php,也可以使用 Web 服务器能定位到的其他名称。
控制台应用的入口脚本一般在应用根目录下命名为 yii(后缀为.php),该文
haoop shell命令
eksliang
hadoop hadoop shell
cat
chgrp
chmod
chown
copyFromLocal
copyToLocal
cp
du
dus
expunge
get
getmerge
ls
lsr
mkdir
movefromLocal
mv
put
rm
rmr
setrep
stat
tail
test
text
MultiStateView不同的状态下显示不同的界面
gundumw100
android
只要将指定的view放在该控件里面,可以该view在不同的状态下显示不同的界面,这对ListView很有用,比如加载界面,空白界面,错误界面。而且这些见面由你指定布局,非常灵活。
PS:ListView虽然可以设置一个EmptyView,但使用起来不方便,不灵活,有点累赘。
<com.kennyc.view.MultiStateView xmlns:android=&qu
jQuery实现页面内锚点平滑跳转
ini
JavaScript html jquery html5 css
平时我们做导航滚动到内容都是通过锚点来做,刷的一下就直接跳到内容了,没有一丝的滚动效果,而且 url 链接最后会有“小尾巴”,就像#keleyi,今天我就介绍一款 jquery 做的滚动的特效,既可以设置滚动速度,又可以在 url 链接上没有“小尾巴”。
效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/37.htmHTML文件代码:
&
kafka offset迁移
kane_xie
kafka
在早前的kafka版本中(0.8.0),offset是被存储在zookeeper中的。
到当前版本(0.8.2)为止,kafka同时支持offset存储在zookeeper和offset manager(broker)中。
从官方的说明来看,未来offset的zookeeper存储将会被弃用。因此现有的基于kafka的项目如果今后计划保持更新的话,可以考虑在合适
android > 搭建 cordova 环境
mft8899
android
1 , 安装 node.js
http://nodejs.org
node -v 查看版本
2, 安装 npm
可以先从 https://github.com/isaacs/npm/tags 下载 源码 解压到
java封装的比较器,比较是否全相同,获取不同字段名字
qifeifei
非常实用的java比较器,贴上代码:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
i
记录一些函数用法
.Aky.
位运算 PHP 数据库 函数 IP
高手们照旧忽略。
想弄个全天朝IP段数据库,找了个今天最新更新的国内所有运营商IP段,copy到文件,用文件函数,字符串函数把玩下。分割出startIp和endIp这样格式写入.txt文件,直接用phpmyadmin导入.csv文件的形式导入。(生命在于折腾,也许你们觉得我傻X,直接下载人家弄好的导入不就可以,做自己的菜鸟,让别人去说吧)
当然用到了ip2long()函数把字符串转为整型数
sublime text 3 rust
wudixiaotie
Sublime Text
1.sublime text 3 => install package => Rust
2.cd ~/.config/sublime-text-3/Packages
3.mkdir rust
4.git clone https://github.com/sp0/rust-style
5.cd rust-style
6.cargo build --release
7.ctrl