前言
kafka是最初由Linkedin公司开发,是一个分布式、支持分区的、多副本的,给予zookeeper协调的分布式消息系统,它的最大特性就是可以实时的处理大量数据以满足各种需求场景:比如给予Hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等 等,用scala语言编写。Linkedin于2010年贡献给了Apache基金会并称为顶级开源项目。
使用场景:
1.日志收集:收集各种服务的log,通过kafka以统一的几口服务的方式开放给各种consumer。
2.消息系统:解耦和生产者和消费者、缓存消息等。
3.用户活动跟踪:kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装在到Hadoop、数据仓库中做离线分析和挖掘
4.运营指标:kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
kafka传统定义
- kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。
- 发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息。
- kafka最新定义:kafka是一个开元的分布式事件流平台,被数千家公司用于高新能数据管道、流分析、数据集成、和关键人物应用
- 消息队列的应用场景:缓存/消峰、解耦和异步通信
什么是MQ:
消息队列中间件,MQ通过将消息的发送和接收分离来实现应用程序的异步解耦,这个给人的直觉是MQ是异步的,用来解耦的, 但是这个只是MQ的想法,而不是目的,MQ真正的目的是为了通讯,屏蔽底层复杂的通讯协议,定义了一套应用层的更加简单的通讯协议。MQ所要做的就是在这些协议(http、TCP)之上构建一个简单的“协议”--生产者/消费者模型。
消息队列的两种模式:
- 点对点模式(单播消息),消费者主动拉取数据,消息收到后清除消息
- 发布/订阅模式(多播消息):
-
- 可以有多个topic主题(浏览、点赞、收藏、评论等)
- 消费者消费数据之后,不删除数据
- 每个消费者相互独立,都可以消费到数据
kafka基础架构
- 为方便扩展,并提高吞吐量,一个topic分为多个partition
- 配合分区的设计,提出消费者组的概念,组内每个消费者并行消费,但是相同消费组中的消费者,不能同时读取同一分区的数据,会造成数据重复
- 为提高可用性,为每个partition增加若干副本(备份 )
- zookeeper中会进行记录谁是Leader,Kafka2.8.0以后可以配置不采用zookeeper
kafka基本概念:
kafka是一个分布式的,分区的消息(官方称之为commit log) 服务。它提供一个消息系统应该具备的功能,但是确有事独特的设计。可以这样来说,kafka借鉴了JMS规范的思想,但是确并没有完全遵循JMS规范。
相关术语
broker可以理解为就是我们的集群节点,每一个集群节点中通过topic(主题)对数据进行分组,一个broker可以存在多个主题,主题中的数据为了提高读写性,所以对数据分开操作就有了分区,就是将一个主题中的数据分为多个块存放。
- 主题:主题-topic在kafka中是一个逻辑的概念,kafka通过topic将消息进行分类、不同的topic会被订阅该topic的消费者消费。但是有一个问题,如果说这个topic中的消息非常非常多,多到需要几个T来存储,应为消息时会被保存到log日志文件中的.为了解决这个文件过大的问题,kafka提出了Partition分区的概念。
- 分区:通过partition将一个topic中的消息分区来存储。这样做的好处是:分区存储,可以解决统一存储文件过大问题
- 提供了读写的吞吐量:读写可以同时在多个分区中进行
- 副本:那么为了增加数据的可靠性,防止数据丢失,会给数据做一个备份称之为副本,副本分为两种:Leader和follower,无论是生产者还是消费者,都只会去操作Leader。
以上就是基于对kafka的定义和简单基本概念的了解,下一篇