详解Kafka应用场景及工作原理

一、概述

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的发布/订阅式分布式消息系统

二、特性

  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
  • 高并发:支持数千个客户端同时读写
  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒

三、应用场景

常见可以用于web/nginx日志、访问日志,消息服务等等,主要应用场景是:日志收集系统和消息系统

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

四、工作原理

分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式

1、发布-订阅模式

在发布-订阅消息系统中,消息被持久化到一个topic中。消费者可以订阅一个或多个topic中的数据,同一条数据也可以被多个消费者消费,数据被消费后不会立马删除(可设置老化机制)消息的生产者称为发布者,消费者称为订阅者
在这里插入图片描述

2、Kafka工作原理

kafka将所有消息组织成多个topic的形式存储在broker,而每个topic又可以拆分成多个partition,每个partition又由一个一个消息组成。每个消息都被标识了一个递增序列号代表其进来的先后顺序,并按顺序存储在partition中(每个partition在存储层面是appendlog文件,任何发布到此partition的消息都会被直接追加到log文件的尾部)

  • Producer:发送消息者,往broker中某个topic里面生产数据;
  • Consumer:消息接受者,从broker中某个topic获取数据;
  • kafka cluster:kafka集群,由多个kafka实例组成,每个实例成为broker;
  • topic:kafka给消息提供的分类方式,broker用来存储不同topic的消息数据
    在这里插入图片描述

在这里插入图片描述

3、consumer的消费模型

一般消息系统,consumer存在两种消费模型:
   push:优势在于消息实时性高。劣势在于没有考虑consumer消费能力和饱和情况,容易导致producer压垮consumer。
  pull:优势在可以控制消费速度和消费数量,保证consumer不会出现饱和。劣势在于当没有数据,会出现空轮询,消耗cpu。

kafka采用pull,并采用可配置化参数保证当存在数据并且数据量达到一定量的时候,consumer端才进行pull操作,否则一直处于block状态

max.poll.interval.ms = 300000 // 默认poll的时间间隔
max.poll.records = 500 // 每次poll的最大消息数

【参考文档】
https://www.jianshu.com/p/734cf729d77b
https://www.cnblogs.com/cnblog-long/p/10684906.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值