首页 > 其他分享 >Streamsets binlog采集时区问题

Streamsets binlog采集时区问题

时间:2024-04-26 18:57:41浏览次数:30  
标签:binlog get int millis 采集 mysql Streamsets Calendar

在使用streamset采集binlog过程中,发现采集的datetime格式的数据他会转换为时间戳,但给的时间戳会有时区问题。

通过百度查到前人解决方法:https://blog.csdn.net/weixin_38751513/article/details/131662819

现详细记录解决过程:

我们的streamsets是通过cdh部署的,第一步先找到streamset依赖的mysql-binlog-connector-java版本。

1.在安装streamsets的服务器上执行find / -name mysql-binlog-connector-java* 

找到这个lib包的位置为:/mnt/bdaaslv/opt/cloudera/parcels/STREAMSETS_DATACOLLECTOR-3.22.0/streamsets-libs/streamsets-datacollector-mysql-binlog-lib/lib

2. cd 到对应目录查看到版本为0.23.4

3. 下载对应版本源码。仓库地址为:https://github.com/osheroff/mysql-binlog-connector-java,找到对应版本的tag。我的版本是0.23.4,所以对应的tag地址为:https://github.com/osheroff/mysql-binlog-connector-java/releases/tag/v0.23.4

4.下载源码,然后按上面教程的修改源码:

//AbstractRowsEventDataDeserializer类下 添加方法

private long convertLocalTimestamp(long millis) { TimeZone tz = TimeZone.getDefault(); Calendar c = Calendar.getInstance(tz); long localMillis = millis; int offset, time; c.set(1970, Calendar.JANUARY, 1, 0, 0, 0); // Add milliseconds while (localMillis > Integer.MAX_VALUE) { c.add(Calendar.MILLISECOND, Integer.MAX_VALUE); localMillis -= Integer.MAX_VALUE; } c.add(Calendar.MILLISECOND, (int)localMillis); // Stupidly, the Calendar will give us the wrong result if we use getTime() directly. // Instead, we calculate the offset and do the math ourselves. time = c.get(Calendar.MILLISECOND); time += c.get(Calendar.SECOND) * 1000; time += c.get(Calendar.MINUTE) * 60 * 1000; time += c.get(Calendar.HOUR_OF_DAY) * 60 * 60 * 1000; offset = tz.getOffset(c.get(Calendar.ERA), c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), c.get(Calendar.DAY_OF_WEEK), time); return (millis - offset); }
//修改方法asUnixTime返回值

protected Long asUnixTime(int year, int month, int day, int hour, int minute, int second, int millis) {
// https://dev.mysql.com/doc/refman/5.0/en/datetime.html
if (year == 0 || month == 0 || day == 0) {
return invalidDateAndTimeRepresentation;
}
// return UnixTime.from(year, month, day, hour, minute, second, millis);
return convertLocalTimestamp(UnixTime.from(year, month, day, hour, minute, second, millis));
}

 

4.打包上传替换原本的包。提示:替换前最好先备份。

5.在cm页面重启streamsets。搞定

标签:binlog,get,int,millis,采集,mysql,Streamsets,Calendar
From: https://www.cnblogs.com/mytg/p/18160686

相关文章

  • 如何通过机台管理平台,构建采集管控通道,使业务能够有序开展?
    机台管理平台是用于监控和管理生产设备数据的综合系统,它对于提高生产效率、降低成本、提升产品质量等方面起着至关重要的作用。 常见的机台管理平台为机台自带的数据上报工具,但存在一定问题:1.统一采集难度:企业可能基于不同业务需求采购了不同厂商、规格、运作模式的机台设备,......
  • 日志服务 HarmonyOS NEXT 日志采集最佳实践
    背景信息随着数字化新时代的全面展开以及5G与物联网(IoT)技术的迅速普及,操作系统正面临前所未有的变革需求。在这个背景下,华为公司自主研发的鸿蒙操作系统(HarmonyOS)应运而生,旨在满足万物互联时代的多元化设备接入、高效协同和安全可靠运行的需求。HarmonyOS不仅着眼于智能手机......
  • MySQL - [13] binlog、redolog、undolog、delaylog
    题记部分 binlog    redolog      undolog  3.1、什么是undo log事务是需要保证原子性的,也就是说,事务中的操作要么全部完成,要么什么也不做。但有如下情况,会造成事务执行不完。①事务执行过程中可能遇到各种错误,比如:代码bug出现异常。②......
  • 岩土工程监测中的振弦采集仪选择与布设策略
    岩土工程监测中的振弦采集仪选择与布设策略岩土工程监测是工程项目中不可缺少的一个环节,它可以实时监测地下水位、土壤位移、地下水压力等参数,对于项目的安全运行和预警起着重要作用。而在岩土工程监测中,振弦采集仪是一种常用的监测设备,它主要用于测量土壤位移和地下水位。本文将......
  • 926-基于PCIe的40Gbps光纤采集记录仪
    基于PCIe的40Gbps光纤采集记录仪   ORI-D2000信号记录仪是一款便携式记录仪产品,满足高达40GBps的数据存储速度、可扩展的大容量存储设备和配套的录取存储管理软件。主要特点  1、基本系统内存64GB,存储容量为7.6T,可扩展至四个盘位。  2、包含一张FPG......
  • 925-12路Base Camera link 影像复合光纤传输采集存储设备
    12路BaseCameralink影像复合光纤传输采集存储设备一、设备概述   全景图像采集设备主要用于12路BaseCameralink视频采集传输,通过QSFP+光纤传输输出,并实现服务器的采集存储,包括采集复合板卡,和光纤采集存储服务器,支持户外工业级温度,长期工作。 二、12......
  • Qt/C++音视频开发71-指定mjpeg/h264格式采集本地摄像头/存储文件到mp4/设备推流/采集
    一、前言用ffmpeg采集本地摄像头,如果不指定格式的话,默认小分辨率比如640x480使用rawvideo格式,大分辨率比如1280x720使用mjpeg格式,当然前提是这个摄像头设备要支持这些格式。目前市面上有一些厂家做的本地设备支持264格式,这个压缩率极高,由于采集到的就是264格式的裸流,所以不用编码......
  • 用DolphinScheduler轻松实现Flume数据采集任务自动化!
    转载自天地风雷水火山泽目的因为我们的数仓数据源是Kafka,离线数仓需要用Flume采集Kafka中的数据到HDFS中。在实际项目中,我们不可能一直在Xshell中启动Flume任务,一是因为项目的Flume任务很多,二是一旦Xshell页面关闭Flume任务就会停止,这样非常不方便,因此必须在后台启动Flume任务......
  • DedeBiz动态列表页设置超过10页就不显示,防止被全站采集的方法
    DedeBiz动态列表页设置超过10页就不显示,防止被全站采集的方法:我们的动态列表页list.php?tid=1&PageNo=28 这个分页的数量控制,设置只能显示10页后面的如果输入大于10就提示错误。找到apps/list.php,在里面添加判断代码文字提醒:if($PageNo>10){ShowMsg('对不起大于10......
  • Google Play App Store API 采集谷歌安卓应用商城app的数据接口 - 2024最新
    iDataRiver平台https://www.idatariver.com/zh-cn/提供开箱即用的谷歌安卓应用商城googleplayappstore数据采集API,供用户按需调用。接口使用详情请参考GooglePlayAppStore接口文档接口列表1.获取指定app的基础信息参数类型是否必填默认值示例值描述apik......