主要是梳理一下kafka学习中的一些注意点,按照消息的流动方向进行梳理.详细的kafka介绍推荐看骑着龙的羊的系列博客,具体的某一块的知识点,可以参考我给出的一些参考文章.

1. kafka在系统中的地位

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

详细参考文章

2. kafka基本原理

(1) kafka系统数据流图

	a) productor发送数据到broker
b) broker确定消息的存储路由,找到对应的topic,并根据分配算法,存储到对应的partition中
c) consumer订阅topic, 读取消息时,根据不同本group对应不同partition的不同offset,获取对应的消息

3. kafka数据流入处理

(1) 在发送一条消息时,可以指定这条消息的key,broker根据这个key和partition机制来判断将这条消息发送到哪个parition。(每个parition都会有个序号)参考文章

(2) 每个partition都有若干个server,其中只有一个作为leader,持有所有对该partition的读写请求.其他最为follower,当leader出现问题是,从所有follower中选一个作为leader,保证该partition正常被读写.(这里的server是指kafka的broker)详细介绍

参考文章

4. kafka数据存储处理

(1) 消息在kafka中是顺序存储在partition中的,partition是物理概念,在操作系统中是以文件夹的形式保存的,命名格式是{topicName}-{partitionId},partition的ID是从0开始编号的.文件夹的组织格式详细介绍参考文章

(2) partition的数据结构类似于队列,先进先出,消息的唯一标示是在partition中的偏移量(offset),(功能类似于操作系统中的偏移量).在新版本的kafka中,offset是有consumer维持,consumer可以选择订阅最新消息,也可以从最开始订阅消息.consumer也可以通过改变offset重复读消息.

(3) offset是保存在一个topic下的,该topic的名称为__consumer_offsets,它有50个partition,标号0-49,以消费的Group,Topic,以及Partition做为组合 Key,利用这个组合key唯一确定offset的存储位置.kafka在内存中保持了__consumer_offsets的内容,加速offset的读取.参考链接

(4) kafka的一个特性就是能够有效保持message,它把message保存在文件中,同时也可以通过设置文件的保存时间或者文件的最大容量来有计划的删除过期消息.

5. kafka数据流出处理

参考文章

(1) consumer订阅topic,实际上订阅的是topic的partition

(2) 消息被均匀保存在一个topic的多个partition中

(3) consumer订阅partition, 受限于自己所在的group,如果consumer所在的group中,有别的consumer订阅了该partition,那么这个consumer就不能订阅该partition.这似乎是矛盾的,似乎这个consumer就不可能完整订阅topic的所有message了.实际上,可以把一个group中所有consumer看成逻辑上的消费者的多个子消费者,这些子消费者采用并发的存在形式从而加速逻辑消费者的消息消费速度.

(4) 详细介绍文章

6. kafka数据备份

参考文章

概要梳理kafka知识点的更多相关文章

  1. kafka知识点整理总结

    kafka知识点整理总结 只不过是敷衍 2017-11-22 21:39:59 kafka知识点整理总结,以备不时之需. 为什么要使用消息系统: 解耦 并行 异步通信:想向队列中放入多少消息就放多少, ...

  2. 跟着刚哥梳理java知识点——面向对象(八)

    面向对象的核心概念:类和对象. 类:对一类事物描述,是抽象的.概念上的定义. 对象:实际存在的该类事物的每个个体,因而也成为实例(Instance). Java类及类的成员:属性(成员变量Field) ...

  3. 跟着刚哥梳理java知识点——多线程(十六)

    创建多线程第一种方式:① 继承:继承Thread.② 重写:重写Thread类的run()方法③ 创建:创建一个子类的对象④ 调用:调用线程的start()方法,启动此线程,调用run()方法 cla ...

  4. [转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则

    转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离 ...

  5. 跟着刚哥梳理java知识点——流程控制(六)

    分支结构(if…else .switch) 1.if else 语句格式 if(条件表达式){ 执行代码块; } else if(条件表达式){ 执行代码块; } else{ 执行代码块; } 2.s ...

  6. 跟着刚哥梳理java知识点——运算符(五)

    运算符:是一种特殊的符号,用以表示数据的运算.赋值和比较. 1.算数运算符(+.-.*./.%.++.--) a)除: int i = 12; double d1 = i / 5; //2.0 dou ...

  7. 跟着刚哥梳理java知识点——变量之间的类型转换(四)

    变量之间的类型转换主要包括自动类型转换和强制类型转换. 1.自动类型转换:当容量小的数据类型与容量大的数据类型做运算时,容量小的会自动的转换成容量大的类型. [知识点]: a)char,byte,sh ...

  8. 跟着刚哥梳理java知识点——基本数据类型(三)

    1.8种基本数据类型 1)4种整数类型(byte.short.int.long) [知识点] 类型 存储空间 数值范围 byte 1字节=8位 -128-127 short 2字节 -2的15次方-2 ...

  9. 跟着刚哥梳理java知识点——注释(二)

    1.单行注释 // //这是main方法,程序的入口 public static void main(String[] args) { //输出语句 System.out.println(" ...

随机推荐

  1. 轻量ORM-SqlRepoEx (六) JOIN

    示例使用的是最新 SqlRepoEx 2.0.2 可在:https://github.com/AzThinker/SqlRepoEx2.0Demo 或:https://gitee.com/azthin ...

  2. PX4地面站QGroundControl在ubuntu下的安装

    1.引言 相信很多玩开源无人机的朋友手上都有一架无人机,而不是仅仅停留在理论的学习和程序的学习.放飞自己组装的无人机才是乐趣所在,那么这本文就介绍玩无人机必不可少的地面站软件qgroundcontro ...

  3. django, CentOS7+nginx(apache)+mod_wsgi+Python+Django

    Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS ...

  4. iOS之创建通知、发送通知和移除通知的坑

    1.创建通知,最好在viewDidLoad的方法中创建 - (void)viewDidLoad { [super viewDidLoad]; //创建通知 [[NSNotificationCenter ...

  5. springboot-自定义起步依赖

    自定义起步依赖步骤: 1.  添加configuration注解文件 -          指定什么情况下加载配置 -          使用enableconfigurationProperties ...

  6. python打印九九乘法表

    每种编程语言都可能会遇到编写“九九乘法表”的问题,用Python来处理也是很简单的,具体代码如下(基于Python3)): i = 1 while i <= 9: j = 1 while j & ...

  7. python生成器函数中return的作用

    当生成器函数中含有return时,return不会返回任何值,会直接终止当前生成器,对yield的作用没有影响,当函数执行到return时候,调用next()来执行生成器则会报错,如果使用for循环遍 ...

  8. 使用C语言协助办公_02批量修改学生信息

    最新录制了一个使用C语言批量修改学生信息的视频,主要是讲了如何处理文件路径以及批量修改的思路.灵感来源于需要将整个17级社保照片按规格改名字.具体见:https://chuanke.baidu.com ...

  9. Java基础——网络编程

    一.网络编程概述 概述: Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库,可以实现无痛的网络连接,联网 ...

  10. C#调用c++类的导出函数

    C# 需要调用C++东西,但是有不想做成COM,就只好先导出类中的函数处理. 不能直接调用,需单独导出函数 参考:http://blog.csdn.net/cartzhang/article/deta ...