本文借鉴:再过半小时,你就能明白kafka的工作原理了(特此感谢!)

一、简介

定义:kafka是一个分布式,基于zookeeper协调的发布/订阅模式的消息系统,本质是一个MQ(消息队列Message Queue),主要用于大数据实时处理领域。

目的:解耦、削峰、异步、缓冲(生产大于消费的情况)

日志保留(retention):我们可以配置主题的消息保留策略,譬如只保留一段时间的日志或者只保留特定大小的日志。当超过这些限制时,老的消息会被删除。我们也可以针对某个主题单独设置消息过期策略,这样对于不同应用可以实现个性化。

PS:消息队列中的消息不是永久存的,会定时删除,自动删除的时间可以配置。

二、消息队列通信的模式

最大的特性就是可以实时的处理大量数据以满足各种需求场景。

1、点对点模式

  如上图所示,点对点模式通常是基于拉取或者轮询的消息传送模型,这个模型的特点是发送到队列的消息被一个且只有一个消费者进行处理。生产者将消息放入消息队列后,由消费者主动的去拉取消息进行消费。

优点:拉取消息的频率可以由自己控制。

存在缺陷:消费者端无法感知消息队列是否有消息需要消费,所以在消费者端需要额外的线程去监控。

2、发布订阅模式(发布订阅模式其实有两种,kafka用的是发布订阅模式中,消费者主动拉取的模式)

  如上图所示,发布订阅模式是一个基于消息送的消息传送模型,该模型可以有多种不同的订阅者。生产者将消息放入消息队列后,队列会将消息推送给订阅过该类消息的消费者(类似微信公众号)。由于是消费者被动接收推送,所以无需感知消息队列是否有待消费的消息!但是consumer1、consumer2、consumer3由于机器性能不一样,所以处理消息的能力也会不一样,而消息队列却无法感知消费者消费的速度!所以推送的速度成了发布订阅模模式的一个问题!假设三个消费者处理速度分别是8M/s、5M/s、2M/s,如果队列推送的速度为5M/s,则consumer3无法承受!如果队列推送的速度为2M/s,则consumer1、consumer2会出现资源的极大浪费!

优点:消费者无需感知消息队列是否有待消费的消息。

存在缺陷:服务者无法感知消费者机器的性能,容易造成接收溢出或主机资源浪费。

三、kafka相关名词

  • Kafka中发布订阅的对象是topic。我们可以为每类数据创建一个topic,把向topic发布消息的客户端称作producer,从topic订阅消息的客户端称作consumer。
  • Producers和consumers可以同时从多个topic读写数据。一个kafka集群由一个或多个broker服务器组成,它负责持久化和备份具体的kafka消息。

  Producer:Producer即生产者,消息的产生者,是消息的入口。
  kafka cluster:kafka集群
    Broker(kafka实例,可看做kafka主机):每个服务器上有一个或多个kafka的实例,我们姑且认为每个broker对应一台服务器。每个kafka集群内的broker都有一个不重复的编号,如图中的broker-0、broker-1等……
    Topic(消息主题,即分类):可以理解为消息的分类,kafka的数据就保存在topic。在每个broker上都可以创建多个topic。
    Partition(分区):每个topic可以有多个分区,分区的作用是做负载,提高kafka的吞吐量(并发)。同一个topic在不同的分区的数据是不重复的,partition的表现形式就是一个一个的文件夹!
    Replication(副本):每一个分区都有多个副本,副本的作用是做备胎。当主分区(Leader)故障的时候会选择一个备胎(Follower)上位,成为Leader。在kafka中默认副本的最大数量是10个,且副本的数量不能大于Broker的数量,followerleader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)。
    Message(消息内容):每一条发送的消息主体。
  Consumer:消费者,即消息的消费方,是消息的出口。
  Consumer Group:我们可以将多个消费组组成一个消费者组,在kafka的设计中同一个分区的数据只能被消费者组中的某一个消费者消费(不同组的消费者可以消费同一个分区的数据)。同一个消费者组的消费者可以消费同一个topic的不同分区的数据,这也是为了提高kafka的吞吐量!
  Zookeeper:kafka集群依赖zookeeper来保存集群的的元信息,来保证系统的可用性。

四、zookeeper在kafka中的作用

kafka集群的正常使用需要依赖zookeeper,可以帮kafka集群存储一些信息。

zookeeper也可以保存消费者的消费信息,目的是消费者挂了重启后,可以接着上次的消费位置继续消费(消费者内存中也会有一份备份,没挂的时候直接取内存)。

转载于:https://www.cnblogs.com/riches/p/11425044.html

kafka学习(一)初识kafka相关推荐

  1. Kafka学习 之 理解Kafka集群(二)

    在学习之前,已经假设已经成功搭建了Kafka集群,开始下面的学习: 1. 理论学习 broker:生产环境中,一台服务器上只会安装一个 Kafka 软件,这台服务器就是一个 Kafka Server, ...

  2. Kafka学习之二 Kafka安装和使用

    部署环境Linux(Centos 6.5),JDK 1.8.0,zookeeper-3.4.12,kafka_2.11-2.0.0. 1. 单机环境     官方建议使用JDK 1.8版本,因此本文使 ...

  3. Kafka学习笔记——使用Kafka记录APP的操作日志

    上一篇文章我们讲到了Kafka的工作原理和如何使用Kafka的代码示例,这里我们开始讲解Kafka的实战,在实际的应用中我们如何使用kafka的.下面将介绍前台的操作日志定时推送到kafka,然后通过 ...

  4. Kafka学习笔记:Kafka的Topic、Partition和Message

    Kafka的Topic和Partition Topic Topic是Kafka数据写入操作的基本单元,可以指定副本 一个Topic包含一个或多个Partition,建Topic的时候可以手动指定Par ...

  5. 大数据 -- kafka学习笔记:知识点整理(部分转载)

    一 为什么需要消息系统 1.解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多 ...

  6. kafka学习_kafka学习(第一章 初识kafka)

    kafka是什么? Kafka是由Apache开发的.开源的流处理平台,它是一个高吞吐量的.持久的.分布式的发布订阅模式的消息系统. 高吞吐量:普通配置的服务器即可满足每秒百万级别消息的生产和消费: ...

  7. [Big Data - Kafka] kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许 ...

  8. kafka 学习总结

    本文转自: https://blog.csdn.net/iverson2010112228/article/details/82631554 主要内容 kafka系统架构概要介绍 kafka重要组件 ...

  9. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

最新文章

  1. forEach-关于跳出循环
  2. android rtsp协议转http协议_网络协议HTTP 协议(一)
  3. 利用insert、update和delete命令可以同时对多个表进行操作_学习笔记-操作系统(1)...
  4. The value of a feed cannot be a tf.Tensor object.
  5. 更改Mysql 密码的4种方法(转)
  6. RabbitMQ的任意延迟队列
  7. Java设计模式总结
  8. 计算机管理格式化没有顺利完成,tf卡无法格式化的解决方法
  9. python中减号怎么打_我的python将减号与破折号混淆
  10. System memory,AGP memory和video memory【转】
  11. 200 件实物,从过往的平面设计窥视上海的变化
  12. 智能眼镜革命:从功能机到智能机,转折点临近
  13. [BZOJ1776] [Usaco2010 Hol]cowpol 奶牛政坛
  14. Ubuntu 16.04 查看软件包的命令技巧
  15. 基于BootStrap+Django+MySQL的云笔记平台系统
  16. 怎样设置和使用speedceo?简洁浏览器的使用分享
  17. 2013.9.23 福特
  18. 去中心化金融的无常损失
  19. java中的mybatis作用_mybatis作用、基本使用、小结
  20. 计算机不识别lacie硬盘,如何从LaCie Rugged 外置硬盘上恢复丢失的数据

热门文章

  1. linux测试怎样看,linux入门篇:如何查看centos版本
  2. Failed to get response from /vue-cli-version-marker
  3. oracle重命名日志成员出错,Oracle日志文件
  4. php json返回sql,php – 如何从我的特定SQL查询中返回json?
  5. oracle 增加ora容量_案例:Oracle报错ORA-01144 详解数据文件大小32GB的限制的原因
  6. 生成osm文件_超酷城市肌理!地理数据信息爬取方法大全(B篇)DEM+POI+OSM
  7. html设置excel打开新窗口,怎么在excel的大页面上设置第几页第几页的
  8. android4.0 菜单,Android 4.0.4系统曝光 增新Power菜单
  9. 深入理解Java类加载器:Java类加载原理解析
  10. 图解:SQL Server SSIS包和job的部署攻略