kafka基础介绍
kafka基础介绍
一、kafka介绍
1.1主要功能
根据官网的介绍,kafka是一个分布式流媒体的平台,它主要有三大功能:
1.11:It lets you publish and subscribe to streams of records 发布和订阅消息流,类似消息队列的的功能,这也是将其归类为消息队列的原因
1.12:It lets you store streams of records in a fault-tolerant way 以容错的方式记录消息流,kafka以文件的方式来存储消息流
1.13:It lets you process streams of records as they occur. 可以在消息发布的时候进行处理
1.2使用场景
1.21:Building real-time streaming data pipelines that reliably get data between systems or applications.在系统和应用程序之间构建可靠的用于实时传输的管道,消息队列
的功能
1.22:Building real-time streaming applications that transform or react to the streams of data 构建实时的流数据处理程序来变换或者处理数据流,数据处理功能
1.23:日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
1.24:消息系统:解耦和生产者和消费者、缓存消息等。
1.25:用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,
然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
1.26:运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
1.27:流式处理:比如spark streaming和storm
1.3基本机制
kafka目前主要作为一个分布式的发布订阅的消息系统来使用,下面介绍一下kafka的基本机制
1.31消息传输流程

producer即生产者,向kafka集群发送消息,在发送消息之前,会对消息进行分类,即Topic,上图展示了两个生产者发送了分类为topic1的消息,另外一个发送了分类
为topic2的消息
topic即主题,通过对消息指定主题可以为消息分类,消费者可以只关注自己需要的topic中的消息
consumer即消费者,消费者通过与kafka集群建立长连接的方式,不断的从kafka集群中拉取消息,然后对这些消息进行处理
从上图可以看出同一个topic下的生产者和消费者数量并不是对应的
1.32kafka服务器消息存储策略

谈到kafka的存储,不得不提到分区,即partitions,创建一个topic的时候,同时可以指定分区的数目,分区数越多,其吞吐量也越大,但是需要的资源也越多,同时也会
导致更高的不可用性,kafka在接到生产者发送的消息后,会根据均衡策略将消息存储到不同的分区中

在每个分区中,消息以顺序存储,最晚接收的也最后被消费
1.33与生产者的交互

生产者向kafka集群发送消息时可以指定分区,也可以通过均衡策略来将消息发送到不同的分区中,如果不指定,就会采用默认的随机均衡策略,将数据随机的存储到不
同的分区中
1.34与消费者的交互

在消费者消费消息时,kafka使用offset来记录当前消费的位置。
在kafka的设计中,可以有多个不同的group来同时消费同一个topic下的消息,如图,我们有两个不同的group同时消费,他们的消费的记录位置offset各不相同,不互相
干扰。
对于一个group而言,消费者的数量不应该多于分区的数量,因为在一个group中,每个分区至多绑定在一个消费者身上,即一个消费者可以消费多个分区,但一个分区只
能给一个消费者消费。若一个group中的消费者数量大于分区数量,多余的消费者将不会收到任何消息
kafka基础介绍的更多相关文章
- kafka 基础知识梳理及集群环境部署记录
一.kafka基础介绍 Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特 ...
- Kafka入门介绍
1. Kafka入门介绍 1.1 Apache Kafka是一个分布式的流平台.这到底意味着什么? 我们认为,一个流平台具有三个关键能力: ① 发布和订阅消息.在这方面,它类似一个消息队列或企业消息系 ...
- Zookeeper与Kafka基础概念和原理
1.zookeeper概念介绍 在介绍ZooKeeper之前,先来介绍一下分布式协调技术,所谓分布式协调技术主要是用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种共享资源,防止造成 ...
- 【转帖】Kafka入门介绍
Kafka入门介绍 https://www.cnblogs.com/swordfall/p/8251700.html 最近在看hdoop的hdfs 以及看了下kafka的底层存储,发现分布式的技术基本 ...
- Kafka基础教程(四):.net core集成使用Kafka消息队列
.net core使用Kafka可以像上一篇介绍的封装那样使用(Kafka基础教程(三):C#使用Kafka消息队列),但是我还是觉得再做一层封装比较好,同时还能使用它做一个日志收集的功能. 因为代码 ...
- Web3D编程入门总结——WebGL与Three.js基础介绍
/*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...
- C++ 迭代器 基础介绍
C++ 迭代器 基础介绍 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭代器就如同一个指针.事实上,C++的指针也是一种迭代器.但是,迭代器不仅仅是指针,因此你不能认为他们一定 ...
- Node.js学习笔记(一)基础介绍
什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
- Node.js 基础介绍
什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
随机推荐
- 什么是二维数组?二维遍历?Java二维数组制作图片迷宫 使用如鹏游戏引擎制作窗口界面 附带压缩包下载,解压后双击start.bat启动
什么是二维数组? 数组当中放的还是数组 int [][] arr=new int[3][2]; 有3个小箱子,每个箱子2个格子. 看结果? int [][] arr=new int[3][2]; Sy ...
- Xcode 6 创建 Empty Application
1.创建一个 Single View Application: 2.删除工程目录下的 Main.storyboard 和 LaunchScreen.xib: 3.打开 Supporting Files ...
- ios之UITabelViewCell的自定义(xib实现2)
上篇文章介绍了如何用UITableView显示表格,并讲了几种UITableViewCell的风格.不过有时候我们需要自己定义 UITableViewCell的风格,其实就是向行中添加子视图.添加子视 ...
- vue循环出来列表里面的列表点击click事件只对当前列表有效;
<div id="app"> <div class=‘b’ v-for='item in items' @click="toggle(item)&quo ...
- 【OS_Linux】Linux中虚拟机的三种上网方式——桥接、NAT、Host-only
1.桥接 桥接方便做实验,配置ip方便.可以和局域网中的其他机器进行通信,也可以和公网进行通信.缺点是会占用主机所在局域网的一个ip. 2. NAT NAT模式下虚拟机可以和主机进行通信,可以上网,而 ...
- Zookeeper 集群 BindException: Cannot assign requested address 解决方案
前言 经历: 最近在搭建zookeeper集群,基础是3台机器(尝试过ubuntu 17 和 Centos 7). 一开始选择的是3台腾讯云服务器,每台机器在java环境配置正确的情况下,单机的情况都 ...
- 使用dmidecode在Linux下获取硬件信息
dmidecode命令可以让你在Linux系统下获取有关硬件方面的信息.dmidecode的作用是将DMI数据库中的信息解码,以可读的文本方式显示.由于DMI信息可以人为修改,因此里面的信息不一定是系 ...
- 条款52:写了placement new 也要写placement delete(write placement delete if you write placement new)
NOTE: 1.当你写一个placement operator new .请确定也要写出了对应的placement operator delete.如果没有这样做,你的程序可能发生隐晦而时断时续的内存 ...
- Linux中的定时任务简单操作实例
今天,我怀着一颗感恩的心,写了一个小小的定时任务,细想还是写个简单的例子吧,希望能帮到你! 首先我在/usr/local/文件夹下创建了一个文件,hah.sh文件 在hah.sh里面编写shell脚本 ...
- js 做的随机8位验证码
开发思路: 画出放置验证码的模块.一个写有“看不清…”的小块,以及输入验证码的文本框 获取各个模块 封装一个函数Yan_ma(),设置验证码为8位,里面含有数字,小写字母,小写字母和中文.每种类型出现 ...