96SEO 2026-02-20 04:09 23
Flume需要将Kafka中topic_db主题的数据传输到HDFS故其需选用KafkaSource以及HDFSSinkChannel选用FileChannel。

HDFSSink需要将不同mysql业务表的数据写到不同的路径并且路径中应当包含一层日期用于区分每天的数据。
关键配置如下
在hadoop104节点的Flume的job目录下创建kafka_to_hdfs_db.conf
org.apache.flume.source.kafka.KafkaSource
a1.sources.r1.batchDurationMillis
a1.sources.r1.kafka.bootstrap.servers
a1.sources.r1.kafka.consumer.group.id
a1.sources.r1.interceptors.i1.type
com.atguigu.gmall.flume.interceptor.TimestampAndTableNameInterceptor$Buildera1.channels.c1.type
/opt/module/flume/checkpoint/behavior2
/opt/module/flume/data/behavior2/
/origin_data/gmall/db/%{tableName}_inc/%Y-%m-%d
falsea1.sinks.k1.hdfs.rollInterval
dependenciesdependencygroupIdorg.apache.flume/groupIdartifactIdflume-ng-core/artifactIdversion1.9.0/versionscopeprovided/scope/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.62/version/dependency
/dependenciesbuildpluginspluginartifactIdmaven-compiler-plugin/artifactIdversion2.3.2/versionconfigurationsource1.8/sourcetarget1.8/target/configuration/pluginpluginartifactIdmaven-assembly-plugin/artifactIdconfigurationdescriptorRefsdescriptorRefjar-with-dependencies/descriptorRef/descriptorRefs/configurationexecutionsexecutionidmake-assembly/idphasepackage/phasegoalsgoalsingle/goal/goals/execution/executions/plugin/plugins
/build在com.atguigu.gmall.flume.interceptor包下创建TimestampAndTableNameInterceptor类
com.atguigu.gmall.flume.interceptor;
com.alibaba.fastjson.JSONObject;
org.apache.flume.interceptor.Interceptor;
java.nio.charset.StandardCharsets;
TimestampAndTableNameInterceptor
StandardCharsets.UTF_8);JSONObject
JSONObject.parseObject(log);Long
jsonObject.getLong(ts);//Maxwell输出的数据中的ts字段时间戳单位为秒Flume
jsonObject.getString(table);headers.put(timestamp,
timeMills);headers.put(tableName,
TimestampAndTableNameInterceptor
将打好的包放入到hadoop104的/opt/module/flume/lib文件夹下
flume-interceptor-1.0-SNAPSHOT-jar-with-dependencies.jar
-Dflume.root.loggerinfo,console
gmall2020-mock-db-2021-11-14.jar
若HDFS上的目标路径已有增量表的数据出现了就证明数据通道已经打通。
仔细观察会发现目标路径中的日期并非模拟数据的业务日期而是当前日期。
这是由于Maxwell输出的JSON字符串中的ts字段的值是数据的变动日期。
而真实场景下数据的业务日期与变动日期应当是一致的。
1在hadoop102节点的/home/atguigu/bin目录下创建脚本f3.sh
/opt/module/flume/job/kafka_to_hdfs_db.conf
1Maxwell时间戳问题此处为了模拟真实环境对Maxwell源码进行了改动增加了一个参数mock_date该参数的作用就是指定Maxwell输出JSON字符串的ts时间戳的日期接下来进行测试。
修改Maxwell配置文件config.properties增加mock_date参数如下
kafka.bootstrap.servershadoop102:9092,hadoop103:9092#kafka
kafka_topictopic_db#注该参数仅在maxwell教学版中存在修改该参数后重启Maxwell才可生效
jdbc_optionsuseSSLfalseserverTimezoneAsia/Shanghai
gmall2020-mock-db-2021-11-14.jar
通常情况下增量表需要在首日进行一次全量同步后续每日再进行增量同步首日全量同步可以使用Maxwell的bootstrap功能方便起见下面编写一个增量表首日全量同步脚本。
1在~/bin目录创建mysql_to_kafka_inc_init.sh
该脚本的作用是初始化所有的增量表只需执行一次MAXWELL_HOME/opt/module/maxwellimport_data()
{$MAXWELL_HOME/bin/maxwell-bootstrap
$MAXWELL_HOME/config.properties
order_detail_activity)import_data
order_detail_coupon)import_data
order_detail_activityimport_data
2为mysql_to_kafka_inc_init.sh增加执行权限
~/bin/mysql_to_kafka_inc_init.sh
1在/home/atguigu/bin目录下创建脚本cluster.sh
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback