发布与订阅消息系统。

数据(消息)的发送者不会直接把消息发送给接受者,这是发布与订阅消息系统的一个特点。发布者以某种方式对消息进行分类,接受者订阅他们,以便接受特定类型的消息。发布与订阅系统一般会有一个broker,也就是发布消息的中心点。
 
 
传统的交互方式: 用户>应用服务器>db 缺点:高并发服务器压力很大。
使用消息队列来替换db连接:用户>应用服务器>消息队列>db处理
 

生产者和消费者

 
kafak的客户端就是kafka的用户,他们被分为两种基本类型:生产者和消费者。除此之外还有其他高级客户端API,用于数据集成的kafka-connect API 和用于流式处理的kafka streams。这些高级客户端API使用生产者和消费者作为内部组件,提供了高级的功能。
 
生产者创建消息,也被称为发布者和写入者。一般情况下,一个消息会被发布到一个特定的主题上。生产者在默认的情况下把消息均衡的分布到主题的所有分区上,而并不关心特定消息会被写到那个分区。
 
消费者读取消息,也被称为订阅者或读者。消费者订阅一个或多个主题,并按照消息生成的顺序来读取他们。消费者通过检查消息的偏移量来判断是否读过消息。偏移量是另一种原数据,它是一个不断递增的整数值,在创建消息试,kafka会把它添加到消息里。消费者是消费群组的一部分,也就是说,会有一个或多个消费者共同读取一个主题。群组保证每个分区只能被一个消费者使用。
 
每一kafka服务称为broker,基于以下几种原因,最好使用多集群。
1.数据类型分离
2.安全需求隔离
3.多数据中心(灾难恢复)
 
注意:kafak的消息复制机制只能在单个集群里进行,不能再多个集群之间进行。但是提供了一个叫做mirrorMaker的工具复制集群之间的数据。
 

kafak的优点?

1.多个生产者,不管客户端在使用单个主题还是多个主题。都是以统一的格式对外提供数据。
2.多个消费者,kakfa支持多个消费者从一个单独的消息流上读取数据,而且消费者之间互不影响。多个消费者可以组成一个群组,他们共享一个消息流,并保证整个群组对每个给定的消息只处理一次。
3.基于磁盘的数据存储,对于单节点或者处理数据慢再或者高峰导致无法及时读取数据,因为kafka对数据进行了持久化。
4.伸缩性,在开发阶段可以使用一个broker,生产情况可以使用集群模式,而且这种扩展是水平扩展,根据业务需求。
5.高性能。
6.数据生态系统。
 
 

kafka使用场景

 
1.活动跟踪,kafak最初受用场景是跟踪用户的活动。网站用户与前端交互之后,前端程序生产用户相关的信息,这些信息就被发布到一个或多个主题上。就这样生产报告。
2.传递消息,将消息发送给应用程序或者其他组件(比如邮件)。
3.度量指标和日志记录,把这些发送到kafka的主题上。
4.提交日志
5.流处理
 

kafka依赖的环境

java,zookeeper(来保存broker元数据信息)
 

kafka的broker配置信息

1.broken.id 每个broken唯一标识,默认值是0,这个值在kafka集群是唯一的。
2.port kafka端口
3.zookeeper.connect 用于保存broker元数据的zookeeperd地址是通过zookeeper.connect来指定的。
4.log.dir kafka把所有消息都保存在磁盘上,存放这些日志片段是通过log.dir指定的。
5.num.recovery.threads.per.data.dir 每个日志片段使用线程的数量。 对于以下3种情况,kafka会只用可配置的线程池来处理日志片段:
  (1).服务器正常启动,用于打开每个分区的日志片段。
  (2).服务器崩溃后重启,用于检查和截短每个分区的日志片段。
  (3).服务正常关闭,用于关闭日志片段。
6.auto.create.topics.enable 默认情况下,kafka会在如下几种情况创建主题:
  (1)当一个生产者开始往主题写入消息时。
  (2)当一个消费者开始从主题读取消息时。
  (3)当任意一个客户端向主题发送元数据请求时。
7.num.partitions 指定主题包含多少个分区,如果自定义可以自己创建主题的时候指定。
8.log.retention.ms 决定数据保存多久,默认168小时也就是一周。
9.log.retention.bates 指定最多可以保存多大。
10.log.segment.bytes 这个作用于日志片段上(消息到达broker时,是被追加到日志片段上),表示日志片段上限多大,如果达到就新开一个分区日志片段。
11.log.segment.ms 指定日志片段多吃时间后被关闭。
12.message.max.bytes 限制消息的大小,如果超过,broker报错。

kafak学习(一)的更多相关文章

  1. 【Spark深入学习 -10】基于spark构建企业级流处理系统

    ----本节内容------- 1.流式处理系统背景 1.1 技术背景 1.2 Spark技术很火 2.流式处理技术介绍 2.1流式处理技术概念 2.2流式处理应用场景 2.3流式处理系统分类 3.流 ...

  2. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  3. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  4. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  5. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  8. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  9. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

随机推荐

  1. 【学习】027 Dubbo

    Dubbo概述 Dubbo的背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 ...

  2. MyBatis:Parameter Maps collection does not contain value for 的问题解决

    Result Maps collection does not contain value for   frontpreviewprofitManage.cdata 出现上述错误 主要是因为你的sel ...

  3. 【NOIP2016提高A组五校联考2】tree

    题目 给一棵n 个结点的有根树,结点由1 到n 标号,根结点的标号为1.每个结点上有一个物品,第i 个结点上的物品价值为vi. 你需要从所有结点中选出若干个结点,使得对于任意一个被选中的结点,其到根的 ...

  4. 【NOIP2016提高A组五校联考2】string

    题目 给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位. 由于答案可能很大,模10^9 ...

  5. guava中Multimap、Multiset使用

    guava中的Multimap接口 Multimap和java.util.Map接口没有任何继承关系.同Map一样,也是放键值对,但是Multimap的值是一个集合.同样支持泛型,假如键值对的key的 ...

  6. D5000系统使用手册--AVC

    有关概念: AVC:自动电压控制 PAS:网络分析应用 SCADA:电网稳态监控应用 闭环:AVC由SCADA系统获得电网的实时运行状态,分析计算后发出控制指令,电网运行状态变化后反馈回AVC,形成闭 ...

  7. 配置 Hive On Tez

    配置 Hive On Tez 标签(空格分隔): hive Tez 部署底层应用 简单介绍 介绍:tez 是基于hive 之上,可以将sql翻译解析成DAG计算的引擎.基于DAG 与mr 架构本身的优 ...

  8. sqli-labs(18)

    开始挑战第十八关(Header Injection - Uagent field - Error based) 常见的HTTP注入点产生位置为[Referer].[X-Forwarded-For].[ ...

  9. Python进制转换format格式化

    进制转换:先介绍用传统数学方法,再介绍用python内置方法 二进制转十进制: 1101 转为十进制 1*2^(4-1)+1*2^(3-1)+0*2^(2-1)+1*2^(1-1) 即各个位拆开,乘以 ...

  10. .net framework4.6项目的dll升级后,未找到方法“System.String.GetPathsOfAllDirectoriesAbove”解决

    https://stackoverflow.com/questions/59276192/getpathsofalldirectoriesabove-cannot-be-evaluated-after ...