kafka

1. 介绍

官网 http://kafka.apache.org/

介绍 http://kafka.apache.org/intro

2. 快速开始

1. 安装

路径: http://kafka.apache.org/downloads

wget https://archive.apache.org/dist/kafka/0.11.0.3/kafka_2.11-0.11.0.3.tgz

sudo tar -zxvf kafka_2.11-0.11.0.3.tgz -C /opt/software/

cd /opt/software/kafka_2.11-0.11.0.3/config/

sudo chown -C admin:admin /opt/software/kafka_2.11-0.11.0.3/

vim server.properties  修改配置信息
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=1
delete.topic.enable=true
log.dirs=/opt/software/kafka_2.11-0.11.0.3/logs zookeeper.connect=localhost:2181
多个节点配置最好是 hadoop1 , hadoop2 , hadoop3 ,kafka依赖于zookeeper的,集群配置如下
zookeeper.connect=hadoop1:2181,hadoop2:2181,hadoop3:2181 创建日志文件
前提是你zk启动好了 kafka启动 就下面 (最好配置下环境变量) ,记住给其他几台机器穿文件时注意 broker.id=1记得修改.
kafka-server-start.sh -daemon /opt/software/kafka_2.11-0.11.0.3/config/server.properties 启动成功就是
[admin@localhost kafka_2.11-0.11.0.3]$ jps
2880 Jps
2804 Kafka
2185 QuorumPeerMain 修改 bin 下的 kafka-server-stop.sh 文件
PIDS=$(ps ax | grep -i 'kafka\.Kafka' | grep java | grep -v grep | awk '{print $1}')
修改后:
PIDS=$(ps ax | grep -i 'Kafka' | grep java | grep -v grep | awk '{print $1}') 就可以使用了 kafka-server-stop.sh关闭 群启动脚本

2. 客户端CRUD 使用

1. 增加
kafka-topics.sh --zookeeper localhost:2181 --create --topic myfirsttopic --partitions 1 --replication-factor 1
意思就是: 执行zk地址 创建topic 指定topic名字 创建1个分区 创建一个副本 此时 zkCli查看
[zk: localhost:2181(CONNECTED) 6] ls /
[app, cluster, controller, controller_epoch, brokers, zookeeper, admin, isr_change_notification, consumers, latest_producer_id_block, config]
[zk: localhost:2181(CONNECTED) 7] ls /brokers
[ids, topics, seqid]
[zk: localhost:2181(CONNECTED) 8] ls /brokers/topics
[myfirsttopic] (这里多了一个topic节点)
[zk: localhost:2181(CONNECTED) 9] 2.查看全部信息
kafka-topics.sh --zookeeper localhost:2181 --list 查看某个节点信息
kafka-topics.sh --zookeeper localhost:2181 --describe --topic myfirsttopic [admin@localhost kafka_2.11-0.11.0.3]$ kafka-topics.sh --zookeeper localhost:2181 --describe --topic myfirsttopic
Topic:myfirsttopic PartitionCount:1 ReplicationFactor:1 Configs:
Topic: myfirsttopic Partition(分区从0开始): 0 Leader(所位于的broker-id): 0 Replicas(副本所在的broker-id位置): 0 Isr(和leader保持同步的副本集合): 0 3. 删除
kafka-topics.sh --zookeeper localhost:2181 --delete --topic myfirsttopic 4.改(alter)
kafka-topics.sh --zookeeper localhost:2181 --alter --topic myfirsttopic --patication 2(修改后的分区只能增加不能减少) 5.启动生产者消费者
kafka-console-producer.sh --topic myfirsttopic --broker-list localhost:9092(可以指定多个) 第一种方式
kafka-console-consumer.sh --topic myfirsttopic --bootstrap-server localhost:9092 第二种方式
kafka-console-consumer.sh --topic myfirsttopic --bootstrap-server localhost:9092 --from-beginning(从头开始消费,涉及到offset)

3. Kafka整体架构和角色

1. 整体架构模型

最开始的模型 P - T - C 模型 , 消费者将自己发布的主题发给Broker,然后存入Broker中,等待消费者使用 , 此时会发现啥问题 ,单点问题, 一个Topic ,那么写入效率会很低, 而且容易宕机

继续 , 进步,完善上面写入较慢的问题 : , 我们发现,此时消费者这边读就麻烦了 , 我要三个都读一遍 , 无语 ,继续改进 ....

此时到了我们第三种架构 , 你有几个 partition ,我去消费的时候, 就派三个人去消费 ,此时就引入了下面的架构 :

但是此时又有一个问题 , 玩意我哪个Topic-Partition 挂掉了咋办呢 ? ,此时就需要建立 副本(duplicate) ,因此引入下面架构 : ,每一个分片都会有相同的副本 ,所以不怕挂掉一个 ,有副本可以接管 .

所以以上架构模型 , 使得 Kafka的 读写 吞吐量 都是特别高的 , 具体细节实现就不讲解了 .么那本事 .

2. 角色分工

1)Producer 消息生产者,就是向kafka broker发消息的客户端;

2)Consumer 消息消费者,向kafka broker取消息的客户端;

3)Consumer Group 消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者

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

5)Topic 可以理解为一个队列,生产者和消费者面向的都是一个topic

6)Partition:可以理解过分片 , 为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列;

7)Replicate: 副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower

8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。

9)follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的follower。

4. 工作流程 & 存储机制

1. 整个工作流程 , 讲解侧重于读

我们主要关注一个点就是偏移量(offset) ,读写全部取决于offset

那么问题来了 ,offset是啥 ,在哪 , 此时就引出了落盘操作 ,在一个log日志文件里, 他的每一条插入记录都有一个offset , 消费者消费数据,只用拿着 offset(前提是他得自个拿个本本记着,我这次看到哪了)去查找就行了 .

但是我们知道如果一个Topic的分片partition全部让一个日志文件去写的话,会造成,这个日志文件很大 ,查起来也不方便 , 难受 ,此时就引入了 再分片segment , 和 索引 index .

根据上面那张图 , 我们差不多可以看清一个topic的架构了 .

先说文件是怎么存储的把 , 因为任何一个抽象的概念都对应这一个物理概念 .,不然找个就空的 .

首先一个Topic名为 TName的 , 此时他的分区名字叫做 TName-0,TName-1,TName-2 的三个文件夹 , 举个栗子 TName-0 文件夹里 ,会对应着3个segment ,每一个segment会是一个 偏移量.index偏移量.log的文件 ,所以一共6个文件 , 三个log ,三个index .

再看看 indexlog 究竟是啥吧 :

其中 , 我们比如说拿着一个offset =3 的去找 ,会先找到 segment-1 ,然后去找0.index,去里面找偏移量为3的 ,然后找到一个物理偏移值 ,拿着这个值 我们又去了 0.log 文件, 终于找到了我们想要的数据 .

2. 分区策略

我们将一个信息 发出去 ,这个信息主要包含

Kafka -入门学习的更多相关文章

  1. Kafka入门学习(一)

    ====常用开源分布式消息系统 *集群:多台机器组成的系统叫集群. *ActiveMQ还是支持JMS的一种消息中间件. *阿里巴巴metaq,rocketmq都有kafka的影子. *kafka的动态 ...

  2. Kafka入门学习随记(二)

    ====Kafka消费者模型 参考博客:http://www.tuicool.com/articles/fI7J3m --分区消费模型 分区消费架构图 图中kafka集群有两台服务器(Server), ...

  3. Kafka入门学习--基础

    Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就可 ...

  4. kafka入门学习---1 启动kakfa

    1.查看kafka生产者产生的数据 kafka-console-consumer.sh --zookeeper hadoop-:,hadoop-:,hadoop-: -topic kafkademo ...

  5. _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)

    博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...

  6. 全网最通俗易懂的Kafka入门!

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在这篇之前已经写过两篇基础文章了,强烈建议先去阅读: ...

  7. ElasticStack的入门学习

    Beats,Logstash负责数据收集与处理.相当于ETL(Extract Transform Load).Elasticsearch负责数据存储.查询.分析.Kibana负责数据探索与可视化分析. ...

  8. 【转帖】全网最通俗易懂的Kafka入门

    全网最通俗易懂的Kafka入门 http://www.itpub.net/2019/12/04/4597/ 前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://g ...

  9. Kafka入门(1):概述

    摘要 在本文中,我将从为什么需要消息队列开始讲起,举两个小例子,跟你聊聊目前消息队列的一些使用场景. 比如消息队列在复杂系统中的解耦,又比如消息队列在高并发下的场景如果让流量变得更平缓. 随后我会跟你 ...

随机推荐

  1. scrf 原理及flask-wtf防护

    了解什么是scrf? SCRF跨站点请求伪造Cross—Site Request Forgery) 指恶意用户通过个人用户的点击,然而盗用用户的账号信息,并发送邮件.虚拟货币的转账,以及一些重要的事务 ...

  2. iptables匹配端口范围,映射,网络状态

    ####匹配端口范围:iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j ACCEPT <==次选iptables -I I ...

  3. $CH5104\ I-country$ 线性$DP$

    CH Sol ”凸联通块“是什么意思呢? 其实就是图形的左端点先减小再增大,右端点先增大再减小 阶段 考虑到第k行,已经选了i个格子 状态 1.第i行的左端点与右端点 2.这一行的左端点相对于上一行的 ...

  4. 一文详解滑动平均法、滑动平均模型法(Moving average,MA)

    任何关于算法.编程.AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI.算法.编程和大数据知识分享,以及免费的SSR节点和 ...

  5. 「分块系列」「洛谷P4168 [Violet]」蒲公英 解题报告

    蒲公英 Description 我们把所有的蒲公英看成一个长度为\(n\)的序列(\(a_1,a_2,...a_n\)),其中\(a_i\)为一个正整数,表示第i棵蒲公英的种类的编号. 每次询问一个区 ...

  6. EF 学习系列二 数据库表的创建和表关系配置(Fluent API、Data Annotations、约定)

    上一篇写了<Entity Farmework领域建模方式 3种编程方式>,现在就Code First 继续学习 1.数据库表的创建 新建一个MVC的项目,在引用右击管理NuGet程序包,点 ...

  7. Spring中常见的设计模式——策略模式

    策略模式(Strategy Pattern) 一.策略模式的应用场景 策略模式的应用场景如下: 系统中有很多类,而他们的区别仅仅在于行为不同. 一个系统需要动态的在集中算法中选择一种 二.用策略模式实 ...

  8. Linux 7.5 SSH服务和SFTP服务分离

    SFTP是SSH的一部分,SFTP没有单独的守护进程,它必须使用SSHD守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像是一个服务器程序,而更像是一个客户端程序. ...

  9. 79.纯 CSS 创作单元素麦当劳金拱门 Logo(原文)

    1. 效果图: 效果地址:https://codepen.io/flyingliao/pen/JgavjX 原理:m是伪元素::before弄出来的,::after遮挡中间下方一小块. 感想:学到一个 ...

  10. 小程序中的pick

    picker:从底部弹起的滚动选择器. 属性:model  string类型  说明:选择器类型 : selector  普通选择器 multiSelector   多列选择器 time   时间选择 ...