[Kafka 101-0] Kafka简介

我们看看Kafka官网的自我介绍:

Kafka® is used for building real-time data pipelines and streaming apps. It is horizontally scalable, fault-tolerant, wicked fast, and runs in production in thousands of companies.

翻译:Kafka用于构建实时的数据管道和流应用,它是水平可扩展的、具备容错能力的、非常快速的,并且已经应用于很多公司的实际生产中。

我把上面的话说的直白一点:Kafka是个优秀的消息队列。那么,消息队列又是什么呢?在实际工作中,我们经常需要把A处产生的数据传输到B处(可能还有C处、D处…),最直接的方式是在A处发送,再从B处接收,但是这样存在几个问题:

  1. 耦合度太高,需要在代码或配置文件里写死上游或下游的地址,一旦有所变动,都需要修改。
  2. 复杂度也高,如果有多个上游或者多个下游,复杂度是上游数量和下游数量的乘积。
  3. 需要上下游进行状态和流量适配,状态适配指的是,上游没有办法在下游宕机的时候工作,这显然不太能接受;流量适配指的是,如果上游流量变大或者变小,下游也需要进行相应的调整来保证正常接收或节约成本。
  4. 没有容错能力,因为消息在上下游之间只发送一次,如果下游处理消息有问题,可能会需要上游重发,这样显然不好。

消息队列可以解决上面的这些问题,如下图所示,图1是直接收发的情形,图2是采用消息队列的情形。

无消息队列

有消息队列

采用消息队列之后,系统的复杂度和耦合度都会大大降低,上下游系统都只需要和消息队列通信,并且对于数据接收性能和容错能力的要求也从下游的各个系统转移到了消息队列身上,消息队列中的数据具有高可用性和一定的持久性,可以重复使用。

消息队列除了Kafka还有很多,比如rabbitMQ、activeMQ、zeroMQ、rocketMQ,还有Redis,实现方式各有不同,也各有优缺点,但我除了Kafka和Redis外用的不多,就不多说了。

总结:Kafka作为消息队列,在应用之间起缓冲的作用,降低应用之间的耦合性,同时允许应用异步处理数据,容错性强,并且可以限流削峰,避免大流量压垮应用。

PS:如果你和我一样对Hadoop/Spark/Kafka/Zeppelin/Flink等技术感兴趣,可以来【大数据学徒】一起交流讨论,共同学习。

大数据学徒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值