发布与订阅消息系统。

数据(消息)的发送者不会直接把消息发送给接受者,这是发布与订阅消息系统的一个特点。发布者以某种方式对消息进行分类,接受者订阅他们,以便接受特定类型的消息。发布与订阅系统一般会有一个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. 解决bootstrap下的图片自适应问题

    .img-responsive { display: block; height: auto; max-width: 100%; }

  2. Java并发编程实战 第2章 线程安全性

    编写线程安全的 代码,核心在与对共享的和可变的对象的状态的访问. 如果多个线程访问一个可变的对象时没有使用同步,那么就会出现错误.在这种情况下,有3中方式可以修复这个问题: 不在线程之间共享该状态变量 ...

  3. 流式布局和viewport

    流式布局 百分比布局,非固定宽度,内容向两边填充,流动的布局. viewport(视口) PC端的网页在手机端的浏览器显示是不会出现网页的,这是因为移动端的网页不是直接放在移动端的浏览器中,而是放在移 ...

  4. Python 字符串Ⅱ

    Python 字符串格式化 Python 支持格式化字符串的输出 .尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中. 在 Python 中,字符 ...

  5. C# 、Java数组申明、初始化区别

    一.数组申明   int[] a1 int a2[] C# 支持 不支持 Java 支持 支持 二.数组申明且初始化    int[] a1 = new int[] { 2, 31 } int a1[ ...

  6. npm 和 cnpm 区别

    来源:https ://blog.csdn.net/shelly1072/article/details/51524029 NPM介绍: 说明:NPM(节点包管理器)是的NodeJS的包管理器,用于节 ...

  7. 源码编译git-go

    2018.8.29 安装指定版本的git 一,安装 编译前准备: 依赖库 yum install curl-devel expat-devel gettext-devel openssl-devel ...

  8. python 输出一个随机数

    题目:输出一个随机数. 程序分析:使用 random 模块. #!/user/bin/env python #coding:utf-8 import random print random.rando ...

  9. 关于SSD和YOLO对小目标的思考

    所谓的小目标,要看是绝对小目标(像素),和相对小目标(相对原图的长宽来看的).大目标小目标只跟receptive field(感受野)有关,cnn本身可以检测任何尺度的物体.ssd对小目标检测不太适用 ...

  10. D2. Equalizing by Division (hard version)

    D2. Equalizing by Division (hard version) 涉及下标运算一定要注意下标是否越界!!! 思路,暴力判断以每个数字为到达态最小花费 #include<bits ...