使用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,大数据)
Java大厂面试实录:谢飞机的电商场景技术问答(Spring Cloud、MyBatis、Redis、Kafka、AI等)
Java大厂面试实录:谢飞机的电商场景技术问答(SpringCloud、MyBatis、Redis、Kafka、AI等)本文模拟知名互联网大厂Java后端岗位面试流程,以电商业务为主线,由严肃面试官与“水货”程序员谢飞机展开有趣的对话,涵盖SpringCloud、MyBatis、Redis、Kafka、SpringSecurity、AI等热门技术栈,并附详细解析,助力求职者备战大厂面试。故事设定谢
Java大厂面试故事:谢飞机的互联网音视频场景技术面试全纪录(Spring Boot、MyBatis、Kafka、Redis、AI等)
来旺
Java场景面试宝典 Java Spring Boot MyBatis Kafka Redis 微服务 AI
Java大厂面试故事:谢飞机的互联网音视频场景技术面试全纪录(SpringBoot、MyBatis、Kafka、Redis、AI等)互联网大厂技术面试不仅考察技术深度,更注重业务场景与系统设计能力。本篇以严肃面试官与“水货”程序员谢飞机的对话,带你体验音视频业务场景下的Java面试全过程,涵盖主流技术栈,并附详细答案解析,助你面试无忧。故事场景设定谢飞机是一名有趣但技术基础略显薄弱的程序员,这次应
php 高并发下日志量巨大,如何高效采集、存储、分析
贵哥的编程之路(热爱分享 为后来者)
PHP语言经典程序100题 php 开发语言
1.问题背景高并发系统每秒产生大量日志(如访问日志、错误日志、业务日志等)。单机写入、存储、分析能力有限,容易成为瓶颈。需要支持实时采集、分布式存储、快速检索与分析。2.主流架构方案一、分布式日志采集架构[应用服务器(PHP等)]|v[日志采集Agent(如Filebeat、Fluentd、Logstash)]|v[消息队列/缓冲(如Kafka、Redis、RabbitMQ)]|v[日志存储(如E
Kafka系列之:Dead Letter Queue死信队列DLQ
快乐骑行^_^
Kafka Kafka系列 Dead Letter Queue 死信队列 DLQ
Kafka系列之:DeadLetterQueue死信队列DLQ一、死信队列二、参数errors.tolerance三、创建死信队列主题四、在启用安全性的情况下使用死信队列更多内容请阅读博主这篇博客:Kafka系列之:KafkaConnect深入探讨-错误处理和死信队列一、死信队列死信队列(DLQ)仅适用于接收器连接器。当一条记录以JSON格式到达接收器连接器时,但接收器连接器配置期望另一种格式,如
消息中间件巡检
搬砖小常
消息中间件运维笔记 RocketMQ kafka 中间件 巡检 运维
除资源使用情况外,消息中间件RocketMQ、kafka还可以巡检哪些?一、RocketMQ巡检1、检查broker写入耗时是否有压力2、检查brokerbusy的数量与频率3、主题发送TPS、发送错误率巡检4、从节点消费情况检查5、集群各broker消息流转情况巡检二、Kafka巡检1、检查是否有分区发生ISR频繁扩张收缩2、检查分区leader选举值是否处于正常水平3、检查controller
数字孪生技术为UI前端注入新活力:实现产品设计的沉浸式体验
ui设计前端开发老司机
ui
hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年+经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言:从“平面交互”到“沉浸体验”的UI革命当用户在电商APP中翻看3D家具模型却无法感知其与自家客厅的匹配度,当设计师在2D屏幕上绘制汽车内饰却难以预判实际乘坐体验——传统UI设计的“平面化、静态化、割裂感”
提升企业级数据处理效率!TDengine 四个集群优化点详解
TDengine (老段)
TDengine 运维 大数据 数据库 物联网 时序数据库 服务器 运维 tdengine
为了帮助企业更好地进行大数据处理,我们在此前TDengine3.x系列版本中进行了几项与集群相关的优化和新功能开发,以提升集群的稳定性和在异常情况下的恢复能力。这些优化包括clusterID隔离、leaderrebalance、raftlearner和restorednode。本文将对这几项重要优化进行详细阐述,以解答企业在此领域的疑问,并帮助大家更好地应对相关挑战。clusterID隔离问题fi
中国银联豪掷1亿采购海光C86架构服务器
信创新态势
海光芯片 C86 国产芯片 海光信息
近日,中国银联国产服务器采购大单正式敲定,基于海光C86架构的服务器产品中标,项目金额超过1亿元。接下来,C86服务器将用于支撑中国银联的虚拟化、大数据、人工智能、研发测试等技术场景,进一步提升其业务处理能力、用户服务效率和信息安全水平。作为我国重要的银行卡组织和金融基础设施,中国银联在全球183个国家和地区设有银联受理网络,境内外成员机构超过2600家,是世界三大银行卡品牌之一。此次中国银联发力
全面探索Kafka:架构、应用与流处理
Kafka:企业级消息系统与流处理平台的深度解析ApacheKafka作为分布式流处理平台,广泛应用于大数据处理和实时分析领域。本文将基于其官方文档,详细探讨Kafka的核心功能、应用场景以及如何进行有效管理。背景简介Kafka作为高吞吐量的消息系统,支持企业级的发布-订阅模式。它能够处理大量实时数据,并支持高并发读写操作。本文将依据Kafka官方文档的内容,逐层深入,从入门到高级应用,帮助读者全
Flink时间窗口详解
bxlj_jcj
Flink flink 大数据
一、引言在大数据流处理的领域中,Flink的时间窗口是一项极为关键的技术,想象一下,你要统计一个电商网站每小时的订单数量。由于订单数据是持续不断产生的,这就形成了一个无界数据流。如果没有时间窗口的概念,你就需要处理无穷无尽的数据,难以进行有效的统计分析。而时间窗口的作用,就是将这无界的数据流按照时间维度切割成一个个有限的“数据块”,方便我们对这些数据进行处理和分析。比如,我们可以定义一个1小时的时
探索实时流处理的未来:Kafka Streams 深度指南
秋或依
探索实时流处理的未来:KafkaStreams深度指南项目介绍欢迎进入KafkaStreams:实时流处理的世界!这不仅仅是一本书,更是一个通往流处理领域深层奥秘的门户。由PrashantPandey编著,这本书以ApacheKafka2.1中的KafkaStreams库为核心,为读者铺就了一条从理解基础概念到熟练掌握KafkaStreams编程的路径。无论是软件工程师、数据架构师,还是对大数据处
Elasticsearch搜索引擎存储:从原理到实践的全景解析
Python×CATIA工业智造
搜索引擎 elasticsearch 大数据
引言在大数据时代,数据规模呈指数级增长,传统数据库的模糊查询、实时分析能力逐渐成为瓶颈。Elasticsearch(简称ES)凭借其分布式架构、实时搜索和灵活的数据分析能力,成为企业级搜索与存储的核心引擎。截至2025年,ES在全球日志分析、电商搜索、实时监控等场景的市场占有率超过60%。本文将从存储架构、核心技术、应用场景及优化策略四个维度,深入解析Elasticsearch的设计哲学与实践价值
【Kafka专栏 13】Kafka的消息确认机制:不是所有的“收到”都叫“确认”!
作者名称:夏之以寒作者简介:专注于Java和大数据领域,致力于探索技术的边界,分享前沿的实践和洞见文章专栏:夏之以寒-kafka专栏专栏介绍:本专栏旨在以浅显易懂的方式介绍Kafka的基本概念、核心组件和使用场景,一步步构建起消息队列和流处理的知识体系,无论是对分布式系统感兴趣,还是准备在大数据领域迈出第一步,本专栏都提供所需的一切资源、指导,以及相关面试题,立刻免费订阅,开启Kafka学习之旅!
C语言学生成绩管理系统<;自创>;(功能7有小错误,但可运行)
han_xue_feng
java
腾讯云加速企业和个人开发创新公开直播预告直播预告:07/18(周四)15:00-16:00随着人工智能与大模型的蓬勃发展,我们正步入一个由技微信实习第一天周五入职,早上早早来到了公司,发现好多人都没上班,到十点才陆陆续续有人来,办理完入职后,mentor中联夏令营遗憾没有入选不过hr的回复真的很好,辛苦啦#提前批简历挂麻了怎么办##机械制造投递记录#大数据开发的工作有点过于简单了吧sq大数据开发的
Python爬虫:从图片或扫描文档中提取文字数据的完整指南
Python爬虫项目
2025年爬虫实战项目 python 爬虫 开发语言 数据挖掘 c++
1.引言随着大数据技术的不断进步,图像数据逐渐成为了许多行业中重要的数据源之一。图像中不仅包含了丰富的视觉信息,还可能蕴含着大量的文字数据。对于科研、企业、政府等多个领域而言,如何从图片或扫描文档中提取出有价值的文字信息是一个亟待解决的问题。在这一过程中,OCR(OpticalCharacterRecognition,光学字符识别)技术成为了解决这一问题的重要工具。在本文中,我们将探讨如何使用Py
【C语言经典面试题】memcpy函数有没有更高效的拷贝实现方法?
架构师李肯
嵌入式物联网开发进阶 c语言 面试 性能优化
【C语言经典面试题】memcpy函数有没有更高效的拷贝实现方法?我相信大部分初中级C程序员在面试的过程中,可能都被问过关于memcpy函数的问题,甚至需要手撕memcpy。本文从另一个角度带你领悟一下memcpy的面试题,你可以看看是否能接得住?文章目录1写在前面2源码实现2.1函数申明2.2简单的功能实现2.3满足大数据量拷贝的功能实现3源码测试4小小总结5更多分享1写在前面假如你遇到下面的面试
python基于Hadoop的NBA球员大数据分析与可视化系统
目录技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示技术栈介绍Django-SpringBoot-php-Node.js-flask本课题的研究方法和研究步骤基本合理,难度适中,本选题是学生所学专业知识的延续,符合学生专业发展方向,对于提高学生的基本知识和技能以及钻研能力有益。该学生能够在预定时间内完成该课题的设计。
大数据技术之集群数据迁移
dfs.namenode.rpc-address.nameservice1.namenode30hadoop104:8020dfs.namenode.rpc-address.nameservice1.namenode37hadoop106:8020dfs.namenode.http-address.nameservice1.namenode30hadoop104:9870dfs.namenode.
如何通过YashanDB优化企业大数据处理流程
数据库
在当今数据驱动的商业环境中,企业面临着巨大的数据处理挑战。性能瓶颈、数据一致性问题和可扩展性需求使得大数据处理成为一项复杂任务。作为一种新兴的数据库管理系统,YashanDB以其独特的架构设计和强大的数据处理能力,在解决这些挑战方面提供了有效的手段。本文旨在探讨如何利用YashanDB优化大数据处理流程,为企业提供高效、可靠的解决方案。YashanDB的体系架构与部署形态YashanDB支持多种部
Pandas 学习教程
_pass_
Data-Alaysis pandas 信息可视化
目录定义基本操作一维数组操作二维数组操作数据选择过滤数据处理数据清洗数据转换数据分析排序分组聚合数据透视表高级操作合并数据时间序列处理自定义函数调用数据可视化集成数据导出和导入大数据分块处理定义全称:'paneldata'and'pythondataanalysis'Analy:Series(一维数据)、DataFrame(二维数据)主要应用:数据清洗:处理缺失数据、重复数据等数据转换:改变数据的
Kafka系列之:安装具有安全认证的kafka-2.8.2分布式集群
快乐骑行^_^
大数据 Kafka系列 安全认证 kafka-2.8.2 分布式集群
Kafka系列之:安装具有安全认证的kafka-2.8.2分布式集群一、下载Zookeeper3.7.1和Kafka2.8.2二、解压Zookeeper3.7.1和Kafka2.8.2三、安装Zookeeper3.7.1详细步骤1.修改zookeeper配置文件2.创建zookeeper数据目录3.zookeeper创建myid4.设置zookeeper访问kafka认证5.拷贝zookeeper
rdkafka线程过多_我是如何处理大并发量订单处理的 KafKa部署总结
weixin_39574928
rdkafka线程过多
今天要介绍的是消息中间件KafKa,应该说是一个很牛的中间件吧,背靠Apache与很多有名的中间件搭配起来用效果更好哦,为什么不用RabbitMQ,因为公司需要它。网上已经有很多怎么用和用到哪的内容,但结果很多人都倒在了入门第一步环境都搭不起来,可谓是从了解到放弃,所以在此特记录如何在linux环境搭建,windows中配置一样,只是启动运行bat文件。想要用它就先必须了解它能做什么及能做到什么程
【Kafka】Failed to send data to Kafka: Expiring 30 record(s) for xxx 732453 ms has passed since last
九师兄
kafka big data zookeeper
文章目录1.美图2.背景2.尝试方案13.尝试解决24.场景再现25.场景46.场景57.场景78.场景8M.拓展本文为博主九师兄(QQ:541711153欢迎来探讨技术)原创文章,未经允许博主不允许转载。1.美图问题与【Flink】Flink写入kafka报错FailedtosenddatatoKafka:Expiring4record(s)for20001mshaspassed重复了。2.背景
【Flink】flink Kafka报错 : Failed to send data to Kafka: This server is not the leader for that topic-pa
九师兄
flink kafka 大数据
1.背景出现这个问题的背景请参考:【Kafka】FailedtosenddatatoKafka:Expiring30record(s)forxxx732453mshaspassedsincelast[2020-09-0513:16:09
如何通过YashanDB提升客户体验
数据库
如何优化查询速度?这是许多企业在使用数据库技术时常常会遇到的问题。查询速度的快慢直接影响到用户的体验,尤其是在大数据量和高并发的使用场景中。顾客期望迅速获取信息,若响应时间过长,可能导致客户流失。因此,优化数据库的性能成为提升客户体验的关键举措之一。YashanDB作为一种高性能的数据库技术架构,提供了多种优化机制,以提升系统的查询速度和整体处理能力。多种部署架构YashanDB支持多种部署架构,
如何通过YashanDB数据库实现企业级数据分区管理?
数据库
在当今大数据时代,企业面临着海量数据的管理和优化访问的问题。如何有效地组织和划分庞大的数据集,以提升查询性能和运维效率,成为数据库系统设计的核心挑战。数据分区技术作为解决大规模数据处理的关键手段,能够显著减少无关数据的访问,优化资源利用率。本文聚焦于YashanDB数据库,详细解析其数据分区管理的实现机制及应用,为企业级应用提供高效、灵活的数据分区解决方案。YashanDB中的数据分区基础Yash
【kafka】在Linux系统中部署配置Kafka的详细用法教程分享
景天科技苑
linux基础与进阶 shell脚本编写实战 kafka linux 分布式 kafka安装配置 kafka优化
✨✨欢迎大家来到景天科技苑✨✨养成好习惯,先赞后看哦~作者简介:景天科技苑《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。《博客》:Python全栈,PyQt5和Tkinter桌面应用开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,云原生K8S,Prometheus监控,数据分析,Django
C/C++ 使用librdkafka库实现的生产者
InstallingprebuiltpackagesOnMacOSX:brewinstalllibrdkafkaOnDebianandUbuntu:aptinstalllibrdkafka-devOnRedHat,CentOS,Fedora:yuminstalllibrdkafka-develInstallinglibrdkafkausingvcpkg:#Installvcpkgifnotalre
使用 Docker 搭建 Python(Flask/CUDA AI)开发环境——AI教你学Docker
使用Docker搭建Python(Flask/CUDAAI)开发环境及常用中间件配置详解本指南适用于用Docker快速搭建Python(FlaskWeb应用或包含CUDA的AI开发环境)开发环境,并集成常用中间件服务如MySQL、Redis、Kafka。适合个人开发、本地测试和小团队协作。一、项目目录结构建议project-root/├──app/#Python应用源码目录│├──Dockerfi
Kafka如何做到消息不丢失
野老杂谈
全网最全IT公司面试宝典 kafka 分布式
一、三种消息传递语义(MessageDeliverySemantics):核心是“消息被消费处理的次数”Kafka的三种传递语义本质上描述的是“一条消息从生产到最终被消费者处理完成,可能出现的次数”,这由生产者的消息写入可靠性和消费者的offset提交策略共同决定。1.Atmostonce(最多一次)定义:消息可能丢失,但绝不会被重复处理。触发场景:消费者先提交offset,再处理消息。流程:消费
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