主要是梳理一下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. ElasticSearch的配置

  2. 摩尔吧 FPGA培训

    摩尔吧  FPGA培训 2017.7.30 第一天与非网摩尔吧创始人苏公雨给我们介绍了FPGA的发展历史,以及目前FPGA厂家的市场定位. 2017.7.30~2017.8.4 这个星期主要是学习画电 ...

  3. 若是将Map作为Key,存入Redis,该如何操作?

    1.先封装HashMap Map<String,Object> map=new HashMap<String,Object>(); map.put("name&quo ...

  4. mybatis if 语句嵌套

    在使用mybatis的时候,可以在 if 标签下面加上if标签. 比如要对这个sql语句进行改进. select a.* from emp a inner join dept b on a.deptn ...

  5. 学习笔记:IDEA、原生ajax的三道练习题、Markdown

    前言 该从何说起呢?想写博客好久了,正好这个学期课很少(大三),可以静下心来写点东西(虽然事情依旧很多),总感觉记录和分享是一件很酷的事情.第一篇博客,第一次使用Markdown写博客,第一次使用ID ...

  6. pt-query-digest慢日志分析工具

    简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOW PROCESSLIST或者通过tcpdum ...

  7. 字符编码ascii、unicode、utf-­‐8、gbk 的关系

    ASIIC码: 计算机是美国人发明和最早使用的,他们为了解决计算机处理字符串的问题,就将数字字母和一些常用的符号做成了一套编码,这个编码就是ASIIC码.ASIIC码包括数字大小写字母和常用符号,一共 ...

  8. JavaScript&jQuery 基本使用

    * 最近连续加班加点三周* 遭不住了 ...* 来点 js / jq 的货* 一个人撸PHP 撸HTML 撸CSS 撸JavaScript 撸jQuery* 不管有没有用记录一下** 1:jQuery ...

  9. 二、linux编译环境的搭建

    1.linux编译工具安装 vim安装:apt-get install vim 注意:使用C语言源代码语法加亮功能,需要配置文件/etc/vim/vimrc,加入代码syntaxon.文件后缀必须为. ...

  10. matlab读取txt文本

    textread函数 原文:http://blog.sina.com.cn/s/blog_618af1950100k926.html 文档:https://ww2.mathworks.cn/help/ ...