KAFKA

KAFKA介绍:
https://www.cnblogs.com/seaspring/p/6138080.html

KAFKA:Controller
http://blog.csdn.net/zhanglh046/article/details/72821995

http://blog.csdn.net/jewes/article/details/42970799

https://www.cnblogs.com/huxi2b/p/6050778.html

KAFKA

KAFKA简介

  • Kafka由Linkedin开发的消息队列,使用Scala语言编写
  • 分布式、多分区、多副本、基于发布/订阅的消息系统
  • Kafka设计的初衷是希望作为一个统一的信息收集平台,能够实时的收集反馈信息,并能够支撑较大的数据量,且具备良好的容错能力

KAFKA特性

  • 消息持久化:采用时间复杂度O(1)的磁盘结构顺序存储
  • 高吞吐量:支持每秒百万级别的消息
  • 易扩展:新增机器,集群无需停机,自动感知
  • 高容错:通过多分区,多副本提供高容错性
  • 多客户端支持:Java、PHP、Python等
  • 实时性:进入到Kafka的消息能够立即被消费者消费

Kafka消息队列的作用

  • 应用程序解耦并行处理
  • 顺序保证
  • 高吞吐率
  • 高容错、高可用
  • 可扩展
  • 峰值处理

Kafka的原理

  • 在Kafka中,发送消息者称为Producer,而消息拉取者称为Consumer ,通常consumer是被定义在Consumer Group里
  • Kafka通过Zookeeper管理集群


  • Kafka集群由多个实例组成,每个节点称为Broker,对消息保存时根 据Topic进行归类
  • 一个Topic可以被划分为多个Partition
  • 每个Partition可以有多个副本


  • Partition内顺序存储,写入新消息采用追加的方式,消费消息采用 FIFO的方式顺序拉取消息
  • 一个Topic可以有多个分区,Kafka只保证同一个分区内有序,不保 证Topic整体(多个分区之间)有序


  • Consumer Group(CG),为了加快读取速度,多个consumer可以划 分为一个组,并行消费一个Topic
  • 一个Topic可以由多个CG订阅,多个CG之间是平等的,同一个CG 内可以有一个或多个consumer,同一个CG内的consumer之间是竞争 关系,一个消息在一个CG内的只能被一个consumer消费


Kafka核心概念

  • Broker:启动kafka的一个实例就是一个broker,一个kafka集 群可以启动多个broker
  • Topic:kafka中同一种类型数据集的名称,相当于数据库中 的表,productor将同一类型的数据写入的同一个topic下, consumer从一个topic消费同一类型的数据
  • Partition:一个topic可以设置多个分区,相当于把一个数据 集分成多份分别放到不同的分区中存储,一个topic可以有一 个或者多个分区,分区内消息有序
  • Replication:副本,一个partition可以设置一个或者多个副本 ,副本主要保证系统能够持续不丢失的对外提供服务,提高 系统的容错能力
  • Producer:消息生产者,负责向kafka中发布消息
  • Consumer Group:消费者所属组,一个Consumer Group可以包含一个或者多个consumer,当一个topic被一个Consumer Group消费的时候,Consumer Group内只能有一个consumer消费同一条消息,不会出现同一个Consumer Group多个consumer同时消费一条消息造成一个消息被一个Consumer Group消费多次的情况
  • Consumer:消息消费者,consumer从kafka指定的主题中拉取消息
  • Zookeeper:Zookeeper在kafka集群中主要用于协调管理,Kafka将
    元数据信息保存在Zookeeper中,通过Zookeeper管理维护整个Kafka 集群的动态扩展、各个Broker负载均衡、Partition leader选举等

Kafka的存储

  • 每个partition的副本是一个目录
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:07 topicnewtest1-0
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:07 topicnewtest1-2
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:08 topicnewtest1-3
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:08 topicnewtest1-4
[hadoop@hadoop4 kafka-logs]$ tree topicnewtest1-0
topicnewtest1-0
├── 00000000000000000000.index
├── 00000000000000000000.log
└── 00000000000000000000.timeindex
  • Segment:段文件,kafka中最小数据存储单位,一个partition包含多 个segment文件,每个segment以message在partition中的起始偏移量 命名以log结尾的文件
  • Offset:消息在分区中的偏移量,用来在分区中唯一的标识这个消 息



    图中的文件名是偏移量第一个文件记录了0--368768的数据,第二个记录了368769-737337的数据
    查看topic的信息可以发现:

[hadoop@hadoop4 kafka_2.11-0.10.2.1]$ bin/kafka-topics.sh --describe --zookeeper hadoop0:2181 --topic topicnewtest1
Topic:topicnewtest1 PartitionCount:5    ReplicationFactor:2 Configs:
    Topic: topicnewtest1    Partition: 0    Leader: 2   Replicas: 2,0   Isr: 2,0
    Topic: topicnewtest1    Partition: 1    Leader: 0   Replicas: 0,1   Isr: 1,0
    Topic: topicnewtest1    Partition: 2    Leader: 1   Replicas: 1,2   Isr: 2,1
    Topic: topicnewtest1    Partition: 3    Leader: 2   Replicas: 2,1   Isr: 2,1
    Topic: topicnewtest1    Partition: 4    Leader: 0   Replicas: 0,2   Isr: 2,0

topicnewtest1这个主题中,有五个partition,每个partition有2个replication,第0个partition的Leader是broker为2的节点,replication是在2,0,这两个节点 ISR 是2,和 0 节点.查看broker0 的节点log目录中,存在partition0 的副本:

[hadoop@hadoop2 kafka-logs]$ ll
total 28
-rw-rw-r--. 1 hadoop hadoop    4 Jan 31 10:07 cleaner-offset-checkpoint
-rw-rw-r--. 1 hadoop hadoop   54 Jan 31 09:32 meta.properties
-rw-rw-r--. 1 hadoop hadoop   58 Jan 31 11:44 recovery-point-offset-checkpoint
-rw-rw-r--. 1 hadoop hadoop   58 Jan 31 11:45 replication-offset-checkpoint
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:27 topicnewtest1-0
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:27 topicnewtest1-1
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:27 topicnewtest1-4
[hadoop@hadoop2 kafka-logs]$ pwd
/home/hadoop/apps/kafka_2.11-0.10.2.1/kafka-logs
[hadoop@hadoop2 kafka-logs]$

Kafka存储-索引文件

  • Kafka为了提高写入、查询速度在partition文件夹下每一个segment log文件都有同名的索引文件,在kafka0.10以后的版本中会存在两个 索引文件,一个用offset做名字以index结尾的索引文件,我们称为 偏移量索引文件。一个是以消息写入的时间戳为做名字以timeinde 结尾的索引文件,我们称为时间戳索引文件。


偏移量索引文件

  • 以偏移量作为名称,index为后缀
  • 索引内容格式:offset,position
  • 采用稀疏存储方式
  • 通过log.index.interval.bytes设置索引跨度


kafka高可用实现

  • 多分区副本
    一个topic可以有多个分区,每个分区可以有多个副本
    一个分区的多个副本选举一个leader,由leader负责读写,其他副
    本作为follower从leader同步消息
    同一个partition的不同副本分布到不同的broker

  • kafka controller 选举
    从集群中的broker选举出一个Broker作为Controller控制节点
    负责整个集群的管理,如Broker管理、Topic管理、Partition
    Leader选举等
    选举过程通过向Zookeeper创建临时znode实现,为被选中的
    Broker监听Controller的znode,等待下次选举

  • kafka partition Leader选举

    • Controller负责分区Leader选举
    • ISR列表
      • Follower批量从Leader拖取数据
      • Leader跟踪其 保持同步flower列表ISR( In Sync Replica),ISR作为下次选主的候选列表
      • Follower心跳超时或者消息落后太多,将被移除出ISR
        Leader失败后,从ISR列表中选择一个Follower作为新的Leader

总结:
一个broker对应多个topic,一个topic对应多个分区,一个topic可以被多个consumer group消费,但只能被同一个consumer group 中的一个consumer消费.
每个partition有多个replication,每个partition有一个Leader.
分区内有序,整体无序.

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

推荐阅读更多精彩内容