两个不同的线程之间是可以通过堆内存的方式进行数据交互的;
T1线程的数据发送得到堆内存,T2线程就可以共享堆内存的数据。

存在的问题:

T1线程发送数据的速率是50/s,T2线程消费的速率是30/s,消费的速率小于生产的速率,就会有大量的数据积压在堆内存或者磁盘文件上,时间长了后,积压的数据就会越来越多,导致影响整个流程的性能。

进程与进程之间的通信可以通过消息中间件的方式
Java Message Service
原理图:

这种模式是一个消息只能发送给一个消费者消费,其他消费者是接收不到的,消费者接收到消息后会反馈给Provider生产者说明消息已被接受到,消息被消费完后就会丢失。


发布-订阅模式是消费者订阅某个主题的消息,主题的消息可以被多个消费者订阅消费。
ActiveMQ、RabbitMQ、RocketMQ是遵循JMS规范的;Kafka是部分遵循JMS的规范
在大数据场景中我们主要采用kafka作为消息中间件,而在javaEE开发中我们主要采用ActiveMQ、RabbitMQ、RocketMQ作为消息中间件。如果JavaEE和大数据在项目中进行融合,那么kafka是不错的选择。

在kafka中,通过偏移量的方式标记每个消息,来确保消息的顺序性。