kafka 消息队列初识

添加消息的依赖

<dependency>

<groupId>org.springframework.kafka</groupId>

<artifactId>spring-kafka</artifactId>

</dependency>

<dependency>

<groupId>io.projectreactor.kafka</groupId>

<artifactId>reactor-kafka</artifactId>

<version>1.1.0.RELEASE</version>

</dependency>

信息队列通信的模式---信息中间件

1》点对点模式

   点对点模式通常是基于拉取或者轮询的消息传送模式,(pull)主动的

特点:发送到队列的消息被一个且只有一个消费者进行处理。生产者将消息放入消息队列后,由消费者主动的去拉去消息进行消费。

优点:消费者拉取消息的频率可以由自己控制,消费者端需要额外的线程去监控消息是否消费。

2》发布订阅模式

发布订阅模式是一个基于消息送的消息传送模式,该模式可以由多种不同的订阅者,(push)被动接受

特点:生产者将消息放入消息队列后,队列会将消息推送给订阅过该类消息的消费者,消息队列无法感知消费者消费的速度,消息的处理速度不同,会出现自己的浪费问题

Kafka 消息:

概念:高吞吐量的分布式发布订阅消息系统,

特点:处理消费者规模的网站中的所有动作流数据,具有高性能,持久化,多副本备份,横向扩展能力,,,等


Producer :生产者,消息的入口,

kafka cluster (kafka 群):

Broker:kafka的实例,每个服务器上有一个或多个kafka 实例,多个broker 在kafka集群中是不重复存在的,会被定义不同不得编号并使用。

Topic:消息的主题,对消息进行分类,kafka数据保存在Topic中,而且,Broker 可以创建多个Topic

Partition:Topic的分区。其作用:处理负载,提高kafka 的吞吐量,同一个Topic 的不同分区数据不重复。Partition相当于一个个的文件夹。

Replication:分区有多个副本,其作用是为了做备胎。当主分区(Leader)c出现故障时,会选择一个备胎(Follower)上位,,成为Leader,在Kafka中默认最大的副本量为10个,且副本的数量不能大于Broker 的数量,follower和Leader 绝对不能在同一个机器中,同一机器对同一分区只能存放一个副本(包括自己)

Message:发送的消息主体

Consumer:消费者,消息的出口,消费方。

Consumer Group:多个消费者组成一个消费组,同一分区的数据,被消费组中一个消费者消费,这样提高了kafka的吞吐量

Zookeeper:kafka集群依赖zookeeper,用来保存集群的元信息,确保系统的可用性。

重点来啦:

工作流程分析:


注意:消息写入leader后,follower 是主动的去 leader进行同步操作的,Producer采用push的方式将数据发布到broker 中,并对每条消息追加到分区中,依次顺序写入磁盘中,以此保证统一分区内的数据是有序的,


如上图:数据在不同的分区中,可能会问没为什么要分区,目的又是什么,

分区的主要目的:1》方便扩展,topic和partition是一对多的关系,可以使用扩展机器,轻松扩展数据量。

                           2》提高并发,以partition 为基本的读写单位,多个消费者可以同时消费数据,提高消费的处理效率。

同时也会有疑问:一个topic 有多个partition,producer 如何确认数据发向哪个partition ?

z在此提下kafka的几大原则:

1:partition 在写入的时候可以选择需要写入的partition,有指定,则写入指定的partition。

2:若没有指定,但是呢,设置可数据的key 值,则会根据key值hash 出一个partition,

3:若没有partition ,也没有key ,则会根据轮询选出一个partition 。

保证信息不丢失是一个消息队列中间件的基本保证,但如何确保呢?-----通过ACK应答机制,

在生产者向队列写入数据的时候,可以设置参数来确定是否确认kafka接收到数据,这个参数可以设置的值为0,1,all。

0:producer 往集群发送数据不需要等到集群的返回,不确保消息的发送成功。其安全性最低,但效率最高。

1:producer往集群发送数据只要leader应答就可以发送一条,只确保leader发送成功。

all:producer 往集群发送数据所有的follower 都完成从leader 的同步发送下一条,确保leader 发送成功何所有副本都完成备份,安全性高,但效率最低。

kafka的应用场景:

主要解决应用解耦,一步消息,流量消费等,实现高性能,高可用,可伸缩和最终一致性架构。存储转发

目前使用较多的消息队列,有Active MQ。BabbitMQ,ZeroMQ,kafka ,MetaMQ,rocket MQ

应用场景:

1:网站活动追踪,对消息进行实时处理,实时监测,离线处理数据仓库,或加载到Hadoop上

2:指标 用于监测数据,分布式应用程序生成的统计数据集中聚合

3:日志聚合:使用kafka代替一个日志聚合的解决方案

4:流处理:基于单个topic主题的实时数据流,

5:实践采集:是一种应用程序的设计风格,kafka支持非常大的存储日志数据的场景

6:提交日志:kafka可以作为一种分布式的外部提交日志,日志帮助节点之间复制数据。并作为失败的节点来恢复实践重新同步,kafka的日志压缩功能能制止这个用法。

k

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、Kafka简介 1.1 什么是kafka kafka是一个分布式、高吞吐量、高扩展性的消息队列系统。kafka...
    风筝flying阅读 827评论 0 0
  • 以下是本消息队列系列文章的传送门: (一)消息队列应用场景 (二)消息队列技术选型 (三)kafka 在通过消息队...
    Jerry_Liang阅读 833评论 0 2
  • 1、Kafka是什么 Kafka 最早是由 LinkedIn 公司采用Scala语言开发的一个多分区、多副本且基于...
    冰河winner阅读 732评论 0 4
  • 1、发送模式 KafkaProducer 是线程安全的,可以在多个线程中共享单个 KafkaProducer 实例...
    冰河winner阅读 909评论 0 1
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,822评论 16 22

友情链接更多精彩内容