Kafka

Kafka简介

Kafka由scala编写,提供java.scalaAPI,它是一个分布式消息队列,一般用来缓存数据,还可以实现拦截器的功能,过滤某些自定义数据, 而Storm / Streaming通过消费Kafka内的数据进行计算. 内部有序,外部分区无序,消费者也有可以有组.

1.Kafka允许您发布和订阅流记录。在这方面,它类似于一个消息队列或企业消息传递系统。

2.Kafka能让你以容错方式进行流记录的存储。

3.数据产生时你就可以进行流数据处理。


Kafka架构

Kafka有自己的一套API: Consumer;

Kafka对消息保存时根据 Topic(可以理解为一个队列) 进行归类,发送(消息)者称为 Producer,消费(消息)者称为 Consumer,此外kafka集群有多个kafka实例组成,每个实例 (server)成为 broker。

Kafka内部机制流程

1. Producer :消息生产者,就是向kafka broker发消息的客户端。 B配置的是1个分区

2. Consumer :消息消费者,向kafka broker取消息的客户端

3. Topic:可以理解为一个队列

4. Consumer Group (CG):这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic

5. Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic

6. Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。

7. Offset:(一个角标,找文件的角标)kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka


Kafka环境搭建

Kafka是集群,所以节点上都要安装.

Kafka依赖zookeeper来保存一些meta信息,依次来保证系统的可用性.

注: 面对JDK.Hadoop.zookeeper都默认好的

1. 官网下载Kafka   kafka.apache.org/downloads.html

2. 解压包到modules路径下

3. cd进入kafka目录下,且在此目录下创建logs文件夹

4. 进入config目录下,编辑server.properties,编辑内容如下:

briker.id=0    //broker的全局唯一编号,不能重复,每个节点要一个唯一标识id

delete.topic.enable=true       //删除topic的功能使能

log.dirs=/opt/modules/kafka_2.11-0.11.0.0/logs    //Kafka运行日志存放的路径

//下面是配置连接zookeeper的集群地址,端口号2181

zookeeper.connect=hadoop101:2181,hadoop102:2181,hadoop103:2181

5. 修改vi /etc/profile

export KAFKA_HOME=/opt/module/kafka         //配置KAFKA_HOME

export PATH=$PATH:$KAFKA_HOME/bin

6. 分发安装包 xsync profile      //xsync是我写的分发脚本,没有的就用命令一个个分发..

7. 在分发的节点上修改brokerid=1  /  brokerid=2      //不得重复

server.properties下的参数解读

num.network.threads=3         //处理网络请求的线程数量

num.io.threads=8        //用来处理磁盘IO的现成数量

socket.send.buffer.bytes=102400         //接收套接字的缓冲区大小

socket.receive.buffer.bytes=102400          //接收套接字的缓冲区大小

socket.request.max.bytes=104857600         //请求套接字的缓冲区大小

num.partitions=1         //topic在当前broker上的分区个数

num.recovery.threads.per.data.dir=1          //用来恢复和清理data下数据的线程数量

log.retention.hours=168          //segment文件保留的最长时间,超时将被删除


Kafka命令行操作

启动kafka: bin/kafka-server-start.sh config/server.properties    //所有节点都要启动

查看服务器中所有topic: bin/kafka-topics.sh --list --zookeeper hadoop101:2181

创建topic: bin/kafka-topics.sh --create --zookeeper hadoop101:2181 --replication-factor 3 --partitions 1--topic first         //有多少个节点就最多创建多少个副本

分组: bin/kafka-console-consumer.sh --zookeeper hadoop102:2181 --topic first --consumer.config config/consumer.properties

注: --topic定义topic名  --replication-factor定义副本数  --partitions定义分区数  //针对以上两个

删除topic: bin/kafka-topics.sh --delete --zookeeperhadoop101:2181 --topic first


Kafka生产过程分析

写入流程

producer写入流程

1. producer先从zookeeper的"/brokers/.../state"节点找到该partition的leader

2. producer将消息发送给该leader

3. leader将消息写入本地log

4. followers从leader pull消息,写入本地log后向leader发送ACK

5. leader收到所有ISR中的replication的ACK后,增加HW(highwatermark,最后commit的offset)并向producer发送ACK

Kafka的存储策略

无论消息是否被消费,kafka都会保留所有消息。有两种策略可以删除旧数据:

1. 基于时间:log.retention.hours=168

2. 基于大小:log.retention.bytes=1073741824


Kafka Stream

Kafka Streams是什么: Apache Kafka开源项目的一个组成部分。是一个功能强大,易于使用的库。用于在Kafka上构建高可分布式、拓展性,容错的应用程序。它建立在流处理的一系列重要功能基础之上,比如正确区分事件和处理时间,处理迟到数据以及高效的应用程序状态管理。

特点1: 功能强大

高拓展性 / 弹性 / 容错 / 有状态和无状态处理 / 基于事件时间的Window,Join,Aggergations

特点2: 轻量级

无需专门的集群 / 一个库,而不是框架

特点3: 完全集成

100%的Kafka 0.10.0版本兼容 / 易于集成到现有的应用程序 / 程序部署无需手工处理(这个指的应该是Kafka多分区机制对Kafka Streams多实例的自动匹配)

特点4: 实时性

毫秒级延迟 / 并非微批处理 / 窗口允许乱序数据 / 允许迟到数据

它的缺点: Kafka Stream能做的东西Storm和Spark Streamin已经完美解决了,况且Streamin有一个Saprk这么好的生态圈,要Kafka Stream是锦上添花,增加学习成本(其实使我不会Kafka Stream)...

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

推荐阅读更多精彩内容