主要是梳理一下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. 基于vue脚手架的项目打包上线(发布)方法和误区

    最近要把vue脚手架开发的一个项目上线,只知道vue脚手架是基于node的服务端项目,那么只需要 npm run dev 就可以轻松启动整个项目,当我想当然的给服务器配置合适的node环境(这里也遇到 ...

  2. SSM整合时初始化出现异常

    java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException  ...

  3. 04JavaScript语法

    1.JavaScript 语法 JavaScript 是一个脚本语言. 它是一个轻量级,但功能强大的编程语言 2.JavaScript 字面量 在编程语言中,一般固定值称为字面量,如 3.14. 数字 ...

  4. html5中audio支持音频格式

    HTML5 Audio标签能够支持wav, mp3, ogg, acc, webm等格式,但有个很重要的音乐文件格式midi(扩展名mid)却在各大浏览器中都没有内置的支持.不是所有的浏览器都支持MP ...

  5. JS this总结

    JS中一切皆对象,this关键字出现在对象定义时的成员(属性和方法)里,因此this指向的是一个JS对象,这个JS对象具体是哪一个的确定是在运行时确定的. 非严格模式: 1.作为对象成员:对象调用对象 ...

  6. button onclick实现跳转的常用方法

    1.onclick="javascript:window.location.href='aa.htm' " 2.onclick="location='URL' " ...

  7. python教程(三)·函数与模块

    函数,这和数学中的函数有点关联,但又不是完全等价 概念 不说的这么官方,我就已自己的理解来表达 ^_^ 在数学中,把一个或多个值(输入x)进行一定的计算或者映射,得到一个值(输出y),这个计算或者映射 ...

  8. C语言学习记录

    思路: 工具书: <c程序设计语言> R&K <linux C 编程一站式学习>

  9. 笔记-jinja2语法

    笔记-jinja2语法 1.      基本语法 控制结构 {% %} 变量取值 {{ }} 注释 {# #} 2.      变量 最常用的是变量,由Flask渲染模板时传过来,比如上例中的”nam ...

  10. [Real World Haskell翻译]第22章 扩展示例:Web客户端编程

    第22章 扩展示例:Web客户端编程 至此,您已经看到了如何与数据库交互,解析一些数据,以及处理错误.现在让我们更进了一步,引入Web客户端库的组合. 在本章,我们将开发一个真正的应用程序:一个播客下 ...