发布与订阅消息系统。

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

最新文章

  1. STL set 用法
  2. java的ArrayList使用方法
  3. java一维数组
  4. Android 类似时间轴的实现
  5. C++ 继承之虚继承与普通继承的内存分布
  6. BAE3.0还不支持本地写入文件
  7. iis 5.1 连接 sql 2005
  8. jax-ws实现WebService
  9. MySQL外键约束OnDelete和OnUpdate的使用
  10. w3wp占用CPU过高
  11. JUit——(三)JUnit核心对象(测试、测试类、Suit和Runner)
  12. 微信小程序之快速接入七牛云
  13. git中常见的几个命令
  14. Java实现MD5加密_字符串加密_文件加密
  15. 02-Python的下载和安装_Python编程之路
  16. Eclipse/Myeclipse生成serialVersionUID方法
  17. mysql 8 nodejs连不上
  18. Flink 报错 "Could not find a suitable table factory for 'org.apache.flink.table.factories.StreamTableSourceFactory' in the classpath"
  19. vue 关于solt得用法
  20. 网络编程——socket编程

热门文章

  1. 浅谈java虚拟机|系列1|架构简介
  2. 深入理解JAVA虚拟机 程序编译和代码优化
  3. STM32Cube IDE 汉字字体变小解决办法
  4. STM32CubeIDE Debug Configurations
  5. 浅谈Java回收对象的标记和对象的二次标记过程_java - JAVA
  6. 【NOIP2016提高A组集训第13场11.11】最大匹配
  7. PHP基础教程 PHP的页面缓冲处理机制
  8. Codeforces 950D A Leapfrog in the Array ( 思维 && 模拟 )
  9. 2018百度之星B轮 degree
  10. springMVC的常用注解有哪些?