项目是做历史表的Migration
锁定一定数量的历史表A,B,C, 每张历史表在配置表里有一张记录, 包括需要distinct的关键字段,包括分区大小,core大小(逻辑分区)以及一个参数(select_clause, 历史表的条件比如时间)
举例子, 数据库配置表里 历史表A 的distinct字段country_code 到60w条数据, 分区大小为2000, 大概分区有300个
mstr表里记录JobId &Job状态& 开始时间 &更写时间 & 主机IP&读写数量(用于搬运前后数据一致的校验)&错误日志
dtl表里写入JobId &分区序号&country_code
300个partition再根据core大小, 分到不同的
参数的传递通过塞到JobContext上下域来传递
300个分区,一次性太多,作为message处理,
node partition( 300分区, core为10, 那么每个nodelist里有30个分区,比如1,11,21,31... 分区和和状态拼接成String类型, Jobid带上,正向或反向做migrate, 放到ExectuteContext里 )5个slave节点 处理10个逻辑节点
remote slave 节点处理:
拿到某一个二层分区(包含1,11,21,31,41拼凑的String,然后给他解析成一层分区的状态)
100G 8-9h
springbatch有自己的表结构
遇到的问题
性能如何提升
主从结构
出现问题?
读写 sql优化, oracle有一些函数,hits parallel
理解 QueueChannel
和 RabbitMQ 的角色
RabbitMQ 的作用
RabbitMQ 是一个消息代理系统,通常用于:
- 消息持久化:将消息存储在磁盘上,以确保即使系统崩溃,消息也不会丢失。
- 跨系统通信:在不同的服务或应用程序之间传递消息。
- 负载均衡:将消息分发到多个消费者,提供负载均衡功能。
- 消息路由:根据路由键和交换器类型,将消息路由到不同的队列。
QueueChannel
的作用
QueueChannel
是 Spring Integration 中的一种通道实现,用于在应用程序内部传递消息。它的主要作用包括:
- 缓冲消息:在内存中存储消息,支持异步处理和流控。
- 应用内部通信:在应用程序内部的各个组件之间传递消息。
- 消息队列语义:提供队列的语义,如先进先出(FIFO)消息处理。
- 处理器解耦:解耦消息生产者和消费者,使得他们可以独立于彼此运行。
为什么在使用 RabbitMQ 时还需要 QueueChannel
?
1. 缓冲和流控
在高负载情况下,RabbitMQ 可能会发送大量消息到应用程序。如果应用程序的处理速度跟不上消息的接收速度,QueueChannel
可以在内存中临时存储这些消息,避免消息处理的拥塞。它类似于一个缓冲区,能够平滑消息流,防止消息处理器被消息洪流压垮。
2. 解耦异步处理
QueueChannel
使得消息的接收和处理可以异步进行。例如,你可以从 RabbitMQ 接收消息并放入 QueueChannel
,然后由另一线程从 QueueChannel
中提取消息进行处理。这种解耦机制提高了系统的灵活性和响应性。
3. 本地消息中转
有时,你可能希望在应用程序内部进行一些消息处理或过滤,然后再决定是否将消息发送到 RabbitMQ 或者其他外部系统。QueueChannel
可以作为一个中转站,方便对消息进行处理、过滤或转发。
4. 提高系统弹性
QueueChannel
提供了一个额外的缓冲层,使得系统在面对网络延迟、RabbitMQ 负载过高或暂时不可用等情况时,能够继续接受并处理消息,提高系统的弹性和稳定性。
5. 内部消息队列
在某些场景下,你可能只需要在应用程序内部传递消息而不需要通过 RabbitMQ。QueueChannel
作为一个轻量级的消息队列,适合这种本地消息传递。
使用 DirectChannel
替代 QueueChannel
DirectChannel
是另一种 Spring Integration 提供的通道,它直接将消息传递给订阅者,而不进行消息的存储和排队。使用 DirectChannel
可以减少消息在系统中的滞留时间,提高消息传递的效率,但这也意味着它没有缓冲功能,无法处理消息激增带来的负载问题。
适用场景
- 低延迟消息传递:消息需要立即传递给处理器,没有等待时间。
- 负载较低:系统中消息量较小,不需要额外的消息缓冲。
- 简单的点对点通信:不需要复杂的消息路由和队列语义。
不适用场景
- 高负载情况:在消息量较大的情况下,
DirectChannel
可能无法有效处理所有消息,容易导致消息丢失或系统崩溃。 - 需要消息缓冲:如果需要对消息进行缓冲和流控,
DirectChannel
不适合。
标签:处理,Spring,分区,Batch,RabbitMQ,消息,QueueChannel,应用程序 From: https://www.cnblogs.com/spicy-food/p/18263895