1. kafka是什么

定义

一千个人眼里有一千个哈姆雷特。如果说谁最有资格定义kafka是什么,那么肯定是官方文档:

Apache Kafka® is a distributed streaming platform.

官方还对流平台进行了定义--流平台有三大关键能力(A streaming platform has three key capabilities):

  • Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.
  • Store streams of records in a fault-tolerant durable way.
  • Process streams of records as they occur.

第一个特性是类MQ的发布订阅特性,第二个特性就是具备容错的存储能力,第三个特性是处理数据。所以kafka可以替代ActiveMQ这类消息中间件。另外我们看一下官方对kafka的定位,如下图所示:


kafka定位

kafka几个重要的概念:

  • Kafka is run as a cluster on one or more servers that can span multiple datacenters.
  • The Kafka cluster stores streams of records in categories called topics.
  • Each record consists of a key, a value, and a timestamp.

架构

kafka架构如下图所示,消息中间件的本质就是:生产-存储-消费。由下图可知,在kafka的架构设计里,无论是生产者,还是消费者,还是消息存储,都可以水平扩容从而提高整个集群的处理能力,生来就是分布式系统。另外,图中没有展示出来的kafka另一个很重要的特性,那就是副本,在创建topic的时候指定分区数量的同时,还可以指定副本的数量(副本最大数量不允许超过broker的数量,否则会报错:Replication factor: 2 larger than available brokers: 1)。各个副本之间只有一个leader,其他是follow,只有leader副本提供读写服务,follow副本只是冷备,当leader挂掉会从follow中选举一个leader,从而达到高可用。

kafka architecture

图片来源于https://en.wikipedia.org/wiki/File:Overview_of_Apache_Kafka.svg

topic

下图是topic的解剖图,kafka只有topic的概念,没有类似ActiveMQ中的Queue(一对一)的概念(ActiveMQ既有Topic又有Queue)。一个topic可以有若干个分区,且分区可以动态修改,但是只允许增加不允许减少。每个分区中的消息是有序的。各个分区之间的消息是无序的。新消息采用追加的方式写入,这种顺序写入方式,从而使kafka的吞吐能力非常强大(一些验证表名顺序写入磁盘的速度超过随机写入内存)。


kafka topic
  • topic定义
    官方定义:A topic is a category or feed name to which records are published. Topics in Kafka are always multi-subscriber; that is, a topic can have zero, one, or many consumers that subscribe to the data written to it.
    例如订单支付成功后,发送名为TOPIC_PAYMENT_ORDER_SUCCESS,积分系统可以接收这个topic,给用户送积分。会员系统可以接收这个topic,增加会员成长值。支付宝里的蚂蚁庄园还有支付成功后送饲料等。

  • 磁盘&内存速度对比
    由下图可知,顺序写入磁盘的速度(Sequential, disk)为53.2M,而随机写入内存的速度(Random, memory)为36.7M。


    磁盘&内存速度对比

图片来源于网络:http://searene.me/2017/07/09/Why-is-Kafka-so-fast/

durable

kafka对消息日志的存储策略为:The Kafka cluster durably persists all published records—whether or not they have been consumed—using a configurable retention period. For example, if the retention policy is set to two days, then for the two days after a record is published, it is available for consumption, after which it will be discarded to free up space. Kafka's performance is effectively constant with respect to data size so storing data for a long time is not a problem.
即无论如何,kafka会持久化保存所有消息,无论它们是否已经被消费。而kafka消息日志保留策略通过配置决定(以log.retention开头的一些配置,例如log.retention.mslog.retention.minuteslog.retention.hourslog.retention.bytes),例如配置有效期两天,那么两天内这些消息日志都能通过offset访问。到期后,kafka会删除这些消息日志文件释放磁盘空间。

consumer

kafka消费topic中某个分区示意图如下,至于kafka如何在各个topic的各个分区中选择某个分区,后面的文章会提到。由下图可知,消费者通过offset定位并读取消息,且各个消费者持有的offset是自己的消费进度。


kafka consumer

consumer group

  • each record published to a topic is delivered to one consumer instance within each subscribing consumer group. Consumer instances can be in separate processes or on separate machines.
  • If all the consumer instances have the same consumer group, then the records will effectively be load balanced over the consumer instances.
  • If all the consumer instances have different consumer groups, then each record will be broadcast to all the consumer processes.

即对于订阅了某个topic的consumer group下的所有consumer,任意一条消息只会被其中一个consumer消费。如果有多个consumer group,各个consumer group之间互不干扰。consumer group示意图如下所示,某个topic消息有4个分区:P0, P1, P2, P3。Consumer Group A中有两个consumer:C1和C2。Consumer Group B中有4个consumer:C3,C4,C5和C6。如果现在生产者发送了一条消息,那么这条消息只会被Consumer Group A中的C1和C2之中某个消费者消费到,以及被Consumer Group B中的C3,C4,C5和C6之中某个消费者消费到。

consumer group
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容