猜想选择kafka的原因
为什么使用MQ?
-
解耦:在deeplog中rsyslog负责采集日志,而它采集到日志如果直接发给日志处理模块,会使得两个模块相互依赖过多,它们需要相互配合解决一些常见的异常情况,如网络、程序异常时怎么恢复数据,负载压力时怎么均衡传输和处理等。这其中一种系统解决这些问题,都会影响单个模块的核心功能,这不利于两个模块核心功能优化和系统稳定,所以需要一个纯粹的模块去降低它们之间的相互依赖,这个纯粹的模块就是MQ,它也因此而产生。
一些开源的MQ组件可以很好的兼容rsyslog,使得rsyslog能够保证日志数据可靠传输给MQ,rsyslog做到可靠给出就够了。而spark或者flink开发的日志处理模块做到可靠的拿到数据,其他的事情交给MQ。 -
冗余:上面说的交给MQ的其他事情,就包括冗余,为了解决网络、程序异常时下游程序恢复数据的情况,通常MQ会持久化数据,直到数据不再被使用。此外,从上游采集到的原始日志,如果有多个系统都需要去处理分析,采集直传各个系统显示不合理,MQ中有持久化数据,各个系统就可以从MQ中取。
-
削峰:当数据突增或者下游系统存在负载压力时,可以由下游系统自行配置获取数据的速率,以降低时效为代码,保证系统运行。
-
异步:由于MQ会将数据持久化,所以收到的数据可以不用即时处理,等需要时再处理。或者在从某个时点,位置读取历史数据。
为什么使用kafka
- 吞吐量大
- 契合日志采集系统,利用多consumer group对原始进行多维度分析
- 与hadoop生态兼容性好