主要是梳理一下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. iOS之创建通知、发送通知和移除通知的坑

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

  2. 关于linux‘RedHat6.9在VMware虚拟机中的安装步骤

    redhat支持多种安装方式:光盘安装,硬盘安装和网络安装等,可以根据个人的实际情况来选择.我在这里选择的是光盘安装的方式安装RHEL6.9.(以下简称6.9) 1.首先准备好6.9的光盘镜像,在安装 ...

  3. 浅谈Django的中间件与Python的装饰器

    浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...

  4. PHP在foreach中对$value赋值

    foreach ($data as $key => $value) { $data[$key]['name'] = '测试在value中赋值';}

  5. Java常用容器对比

    ArrayList与Vector ArrayList和Vector内部都是由数组实现的,数组实现的优点就是支持元素的随机访问(O(1)),但是在对元素进行插入和删除操作时,需要向后或向前移动数组,这样 ...

  6. 对QP中RTC的理解

    1.概念 RTC(Run To Completion)是运行到完成为止的意思.在状态机中,从源状态到目标状态的转换动作要运行到完成. 从字面上来看,这个过程像是不可中断的,但实际并不是,这个过程可以被 ...

  7. 『Linux基础 - 1』计算机基础概念

    这篇笔记的知识点结构目录: 认识计算机: (1)什么是计算机; (2)计算机的发展过程 计算机的构成: (1) 计算机硬件系统; (2) 计算机软件系统 二进制: (1) 为什么用二进制 (2) 二进 ...

  8. 在线升级python3.3版本

    1.sudo su 2.wget -P /usr/local  http://www.python.org/ftp/python/3.3.0/Python-3.3.0.tgz    #指定下载到目录/ ...

  9. bit_length

    #当十进制用二进制表示时,最少使用的位数 v=2data=v.bit_length()print(data)

  10. shazam音乐检索算法 附完整c代码

    在讲算法之前,上一些前人的资料. http://coding-geek.com/how-shazam-works/ https://laplacian.wordpress.com/2009/01/10 ...