kafka基础介绍

  • 1.1 kafka介绍
  • 1.2 kafka的特性:
  • 1.3 kafka的应用场景:
  • 1.4 kafka的优点:


1.1 kafka介绍

Kafka最初由Linkedin公司开发,是一个分布式的、采用发布/订阅模式、基于zookeeper协调的分布式日志系统(也可以当做MQ系统),主要应用于大数据实时处理领域,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

单台kafka消费速度 kafka单机性能_大数据

1.2 kafka的特性:

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒;
  • 高并发:单机可支持数千个客户端同时读写;
  • 可扩展性:kafka集群支持热扩展;
  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止丢失;
  • 容错性:允许集群中的节点失败(若分区副本数量为n,则允许n-1个节点失败);

1.3 kafka的应用场景:

  • 日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口开放给各种消费端,例如hadoop、Hbase、Solr等。
  • 消息系统:解耦生产者和消费者、缓存消息等。
  • 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索记录、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
  • 运营指标:Kafka也经常用来记录运营监控数据。
  • 流式处理。

1.4 kafka的优点:

无kafka中间件

有kafka中间件

单台kafka消费速度 kafka单机性能_大数据_02

单台kafka消费速度 kafka单机性能_分布式_03

kafka中间件的作用示意图

1、解耦
一个系统一般都有很多个模块,但业务发展起来,系统的体量就跟着变大,就需要多做几个模块,然而每拓展一个模块就要多各种调用。 以一个交易系统为例,当完成一次交易,系统需要通知推荐系统、广告系统等。当多出一个模块,系统就要增加一个调用,从而需要修改代码。 如果增加消息中间件,各个模块只需要完成各自的工作,然后将消息发到消息队列,由其他模块去取或者消息队列推送,就可以解决耦合的问题了。

2、异步
传统系统的话,一条路走到底,比如购买商品,完了扣除优惠券,再返积分。这每个流程可能就花一点时间,但合起来就很久了。 加上消息队列,在完成自己部分的工作后,直接给队列,队列再通知其他模块,这不仅省事儿,还减少了不必要的时间浪费。

3、削峰
还是以传统系统为例,当并发量大的时候直接怼到数据库,数据库承受的压力非常大。那就加个消息队列,把请求扔到消息队列,慢慢处理。