storm中sbolt用来读数据,bolt用来处理数据,高级的功能需要自己来实现。
spark streaming :微批次,准实时,微批次的task不停的进线程池,出线程池,
flink:设计之初的理念就比较先进,再加上阿里把他收购了,技术的底蕴非常强。
spark streming设置的时间间隔即使设置称毫秒,延迟也比较高?
因为每一个批次的产生,每一个task的调度,执行完之后要从线程池里面释放掉
flink为什么快?
task一旦产生,调度到taskmanager里面就不出来了,
sparkstreaming实现一个聚合类的exactly-once,把数据处理了,进行一些累加,每一个 批次会产生一个结果,要历史数据累加,可以使用upstatebykey,用sparkstreaming里面的状态,但是这个状态api不是那么的灵活,不是那么的好用,那就意味着我们要把中间结果存到外面的数据库里面,我们原来把他存到mysql,redis,但是每一个批次来了,我们都要频繁和外面的数据库交互,如果外面的数据库出现问题了,甚至中间结果都会丢掉,需要再同一个事务中存储偏移量和中间结果,来容错
flink相对spark有什么优势?
以实时的思想设计,将批处理视为特殊的流处理即有界数据流
可以灵活部署,部署的yarn上,可以部署云端,
中间结果放内存一份,定期持久化。
spark streaming
flink
dstream
datastream
transformation
transfomation
acion
sink
task
subtask
pipeline
oprater chain
dag
dataflow graph
master+driver
jobmanager
worker+executor
taskmanager
jobmanager
也成为master,用于协调分布式运行,它用来调度他上课,协调检查点,协调失败是恢复等。
flink运行时至少存在一个master,如果配置得高可用,会存在多个master,他们其中有一个leader,而其他得都是standby .
taskmanager
也称为worker,用于执行一个dataflow得task,数据缓冲和data streams得数据交换
flink运行时至少会存在一个taskmanager,jobmanager可以直接运行再物理机上,或者运行再yarn这样的资源调度框架,taskmanager通过网络链接到jobmanager,通过rpc通信告知自身的可用性进而获得任务分配。