记一次难受的上线经历

本文记录了一次信贷业务上线过程中遇到的ES版本冲突、Spark与Flink转换问题,以及解决这些问题的经过。从Spark消费Kafka数据到ES存储,因jar包版本不一致导致各种错误,最终通过修改查询方式、处理数据类型和调整打包策略成功解决问题并上线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.业务背景

该业务为信贷业务,业务流程图如下:信贷基本流程
数据部门主要是对两次用户数据进行存储和解析转换,存储用的ES来存(将两次用户数据合并存为一条)

2.开发

由于之前业务是通过spark消费kafka数据进行计算,最后落地到ES上,所以这次需求下来,也直接采用了这个方案。
于是开发阶段就确定,第一次数据通过spark计算指标之后,就直接落地ES,然后第二次ES过来之后,通过申请号(同一个用户申请号一致)将两条数据合并,最后再落ES。
在这样的方案下,开发进行得很顺利。

3.测试

在测试阶段,利用本地idea跑spark程序进行联调测试得,当然测试也很顺利得通过。

4.上线

临近上线,我早早的到线上环境部署,完蛋,部署报错,java.lang.NoSuchFieldError: INSTANCE,于是Google了一下,好吧 版本冲突。心想,哎呀 这个简单呀。然后回到开发环境一顿操作。PS:还发现了RestHighLevelClient对象没有单例,然后把单例加上了。

操作一通后,发现还有测试集群环境这个东西,之前居然没有想到。然后部署了测试集群环境,发现主要是httpcli

包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class com.google.gson.FieldNamingStrategy.class com.google.gson.Gson.class com.google.gson.GsonBuilder.class com.google.gson.InstanceCreator.class com.google.gson.JsonArray.class com.google.gson.JsonDeserializationContext.class com.google.gson.JsonDeserializer.class com.google.gson.JsonElement.class com.google.gson.JsonIOException.class com.google.gson.JsonNull.class com.google.gson.JsonObject.class com.google.gson.JsonParseException.class com.google.gson.JsonParser.class com.google.gson.JsonPrimitive.class com.google.gson.JsonSerializationContext.class com.google.gson.JsonSerializer.class com.google.gson.JsonStreamParser.class com.google.gson.JsonSyntaxException.class com.google.gson.LongSerializationPolicy.class com.google.gson.TreeTypeAdapter.class com.google.gson.TypeAdapter.class com.google.gson.TypeAdapterFactory.class com.google.gson.annotations.Expose.class com.google.gson.annotations.SerializedName.class com.google.gson.annotations.Since.class com.google.gson.annotations.Until.class com.google.gson.internal.ConstructorConstructor.class com.google.gson.internal.Excluder.class com.google.gson.internal.JsonReaderInternalAccess.class com.google.gson.internal.LazilyParsedNumber.class com.google.gson.internal.LinkedTreeMap.class com.google.gson.internal.ObjectConstructor.class com.google.gson.internal.Primitives.class com.google.gson.internal.Streams.class com.google.gson.internal.UnsafeAllocator.class com.google.gson.internal.bind.ArrayTypeAdapter.class com.google.gson.internal.bind.CollectionTypeAdapterFactory.class com.google.gson.internal.bind.DateTypeAdapter.class com.google.gson.internal.bind.JsonTreeReader.class com.google.gson.internal.bind.JsonTreeWriter.class com.google.gson.internal.bind.MapTypeAdapterFactory.class com.google.gson.internal.bind.ObjectTypeAdapter.class com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.class com.google.gson.internal.bind.SqlDateTypeAdapter.class com.google.gson.internal.bind.TimeTypeAdapter.class com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.class com.google.gson.internal.bind.TypeAdapters.class com.google.gson.reflect.TypeToken.class com.google.gson.stream.JsonReader.class com.google.gson.stream.JsonScope.class com.google.gson.stream.JsonToken.class com.google.gson.stream.JsonWriter.class com.google.gson.stream.MalformedJsonException.class
### 网站上线流程及相关注意事项 #### 1. 上线前准备工作 在网站正式上线之前,需要完成一系列的前期准备工作。这些工作主要包括但不限于配置项管理、数据库脚本编写以及测试环境验证等内容。为了减少潜在的风险,在部署前应当将所有的前置配置提前至少一个小时进行检查和确认[^2]。 #### 2. 数据库与配置文件管理 对于涉及数据存储的应用程序来说,数据库初始化或者迁移操作是非常重要的一步。建议把所有必要的SQL语句整理成易于复制粘贴的形式存放在运维文档里,并确保它们能够在生产环境中顺利运行而不会破坏现有结构或丢失重要资料。 #### 3. 正式部署过程中的应急措施 当新版本被推送至服务器之后,如果发现任何异常状况,则应该立即采取行动来控制局面恶化程度。具体做法可以是对当前状态做一个快照备份以便后续分析原因;另外还要考虑实施回滚策略——即将服务恢复到上一个稳定的状态直到查明根本原因是安全的做法之一。 #### 4. 多个项目并发处理机制 如果有多个不同的特性更新计划在同一时间段内被执行的话,《发布汇总登表》可以帮助团队成员清晰地了解到各自负责的部分以及其他关联部分的信息交流渠道畅通无阻。此外还需要指定专门人员作为每一段更改录的主要联系人及其副手角色以备不时之需。 #### 5. 功能验收标准制定 针对每一次迭代后的成果物都需要有一套完整的检验清单用来指导QA工程师们如何去评估其质量水平是否达到了预期目标。因此事先规划好这一部分内容能够有效防止因疏忽而导致的功能缺失现象发生概率增加的情况出现。 #### 6. 后续维护活动安排 一旦完成了初次交付动作并不代表整个项目的结束而是另一个阶段开始即持续改进期。在这个时期内定期回顾总结经验教训就显得尤为重要因为它不仅有助于提高未来类似工作的效率还能促进个人能力的成长与发展。 #### 7. 安全性和性能优化考量 (特别适用于区块链领域内的智能合约场景) 除了上述提到的传统Web应用之外, 对于那些基于分布式账本技术构建起来的服务而言还存在着额外的关注焦点比如安全性保障方面就需要经历严格的审查环节才能放心投入使用; 另外考虑到交易成本因素也需要尽可能做到资源利用最大化从而满足用户体验需求的同时也能维持较低的操作费用支出比例[^3]. ```bash #!/bin/bash # Example of a simple deployment script that could be used as part of the process. echo "Starting Deployment..." cp /path/to/configs/* /var/www/html/ mysql -u root -p < /path/to/database.sql service apache2 restart echo "Deployment Completed." ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值