Kafka学习(1)——kafka综述

在公司做数据推送时,开始接触kafka。由于那一套kafka数据推送的框架并不是笔者本人搭建的,因此只是停留在浅显的使用上。

学技术就是这样,不会、没见过、看不懂,官方英文文档就像婆娘的裹脚布又臭又长等等,这些困难都别怕。技术就像一个工具,先浅显的用,用的大致熟了,再去了解这个工具,等深入了解了,再去总结归纳这个工具,最后有能力者,改进这个工具。

本次关于kafka学习的笔记,将分为四个部分进行:

  1. kafka综述:简要归纳kafka是什么
  2. 本地运行:从github上把kafka项目拉下来,本地命令行运行
  3. Kafka Manager: github上开源的kafka管理工具,为kafka消息的发送接收提供可视化操作界面
  4. write demo:写自己的producerconsumer,并简单地应用kafka

kafka是什么呢?

kafka是一个分布式、可分区的消息系统。之前看过一篇博客,比喻的很好。发消息的系统是生产者(producer),而接收消息的系统是消费者(consumer),如果把消息比喻为鸡蛋,那么生产者就是母鸡,而消费者可以理解为吃鸡蛋的人。母鸡下一个蛋,人就吃一个蛋,很和谐。如果人吃鸡蛋的时候噎住了(系统宕机了),那母鸡后面下的蛋就会丢失(数据丢失了),而如果母鸡下蛋速度超过人吃鸡蛋的速度,那人就会吃不消,消息就会堵塞,导致系统超时,鸡蛋又会丢失。这个时候就需要一个篮子,把鸡蛋周转一下。kafka就是这样一个篮子。

好吧,具体先根据我自己在做的业务来分析吧。“数据推送”是企业级应用比较常见一个功能,将数据从一个系统中推送到另一个系统中,可以用spring 的Integration来实现,而应用kafka是一个更好的解决方案。

我们把要推送数据的主键(id)、操作类型(update、delete等)、关键字(key:表示是哪个实体对应的数据)封装为一个model,把这个model当做消息发送给kafka,而消费者从kafka主动pull这个model,消费者拿到model后,解析它,并根据解析的model直接、主动从生产者那儿读取所要推送的数据。

这样做的好处显而易见,生产者那边推送会非常快,因为只需要推送一个model即可,用户就可以去做其他事情了。此外,要推送的数据也不会丢失,因为消息(model)被安全的保存在kafka中,如果消费者没有成功保存数据,那么再去读这个消息即可。这得益于kafka的优良设计。

kafka名词解释
  • producer 生产者,主动发消息的系统(下蛋的母鸡)
  • consumer 消费者,主动向kafka读消息的系统(吃蛋的人)
  • topic 主题,可以理解为向鸡蛋上贴一个标签,吃蛋的人不是每个鸡蛋都吃,它只吃某个topic的鸡蛋。
    -broker可以理解为篮子
  • partition 分区,kafka对于一个topic会有多个分区去保存消息。
  • offset偏移量,是一个整数,就像指针,这个偏移量是消费者去控制的,偏移量指着几,就去读分区上的对应数字的消息。一个分区、一个消费者对应一个offset。
一个topic有多个分区,这里有三个,每个分区存储很多消息

分区可以处理更多的消息,不受单台服务器的限制;分区可以作为并行处理的单元

kafka 分布式(Distribution)

一个topic的分区被分布到集群中的多个服务器上。每个服务器处理它分到的分区。 根据配置每个分区还可以复制到其它服务器作为备份容错。 每个分区有一个leader,零或多个follower。Leader处理此分区的所有的读写请求,而follower被动的复制数据。如果leader宕机,其它的一个follower会被推举为新的leader。 一台服务器可能同时是一个分区的leader,另一个分区的follower。 这样可以平衡负载,避免所有的请求都只让一台或者某几台服务器处理。

生产者往某个Topic上发布消息。生产者也负责选择发布到Topic上的哪一个分区。最简单的方式从分区列表中轮流选择。也可以根据某种算法依照权重选择分区。开发者负责如何选择分区的算法。

通常来讲,消息模型可以分为两种, 队列和发布-订阅式。 队列的处理方式是 一组消费者从服务器读取消息,一条消息只有其中的一个消费者来处理。在发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。Kafka为这两种模型提供了单一的消费者抽象模型: 消费者组 (consumer group)。 消费者用一个消费者组名标记自己。 一个发布在Topic上消息被分发给此消费者组中的一个消费者。 假如所有的消费者都在一个组中,那么这就变成了queue模型。 假如所有的消费者都在不同的组中,那么就完全变成了发布-订阅模型。 更通用的, 我们可以创建一些消费者组作为逻辑上的订阅者。每个组包含数目不等的消费者, 一个组内多个消费者可以用来扩展性能和容错。正如下图所示:

一个集群包含两个server,每个server包含两个分区;两个消费者组

通过并行topic的parition —— kafka提供了顺序保证和负载均衡。每个partition仅由同一个消费者组中的一个消费者消费到。并确保消费者是该partition的唯一消费者,并按顺序消费数据。每个topic有多个分区,则需要对多个消费者做负载均衡,但请注意,相同的消费者组中不能有比分区更多的消费者,否则多出的消费者一直处于空等待,不会收到消息。

也就是说,在一个消费者组中,消费者与分区是一对多的关系。

关于kafka更多的信息,请参见这里

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,638评论 18 139
  • Kafka入门经典教程-Kafka-about云开发 http://www.aboutyun.com/threa...
    葡萄喃喃呓语阅读 10,814评论 4 54
  • Kafka官网:http://kafka.apache.org/入门1.1 介绍Kafka™ 是一个分布式流处理系...
    it_zzy阅读 3,887评论 3 53
  • kafka的定义:是一个分布式消息系统,由LinkedIn使用Scala编写,用作LinkedIn的活动流(Act...
    时待吾阅读 5,311评论 1 15
  • 项目4月份发版,直接需要整合kafka,今天开始学,一个月内完成kafka的部分。 资料来源:http://www...
    MisterCH阅读 1,737评论 0 4