消息队列kafka

103 阅读3分钟

www.cnblogs.com/frankdeng/p…

blog.csdn.net/qq_28900249…

blog.csdn.net/u013256816/…

blog.csdn.net/yanshu2012/…

定义: 数据的传输时,使用kafaka中间间,可以使两端解耦 0.10.x版本及以上,Kafka是一个分布式的流处理平台(数据注入功能,数据存储功能,流处理功能)

使用的场景: 1、如果有些问题的处理比较慢,但是会结果返回没有影响,可以直接返回结果,后面的处理,存入到消息队列,防止用户线程长时间占用服务器资源

2、对于高峰的问题,可以使用消息队列实现削峰

3 优点:

消息队列的模式 一对一模式

一对多模式

生产的消息可以发布到不同不服务器的同一个topic,提高程序的并发性 topic:不同的接口,使用不同的主题,用于区分 一个broker里面有一个leader和一个follower,follower用于备份数据和切换 kafka里面是一个集群,每个消息队列有一个broker broler里面有多个Partition(分区),topic

消费端的消费组里,一条消息只能消费一次

消费组也是提高并发处理的能力

kafka的配置文件,server.log的配置文件,可以配置连接的zookpper,集群号,备份数据的路径,网络连接的线程数

由消费者主动消费

kafka充当的角色(可以消峰)

名词解释 Broker Kafka集群中的服务器 Topic 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic Partition Partition是物理上的概念,每个Topic包含一个或多个Partition Replica Partition 的副本,保障 partition 的高可用 Producer 消息生产者 负责发布消息到Kafka broker Consumer 消息消费者,向Kafka broker读取消息的客户端 Consumer Group 每个 consumer 都属于一个 consumer group

解读 ProducerRecord:每个消息是一个ProducerRecord对象,其中Topic和Value值必填,partition和key非必填。 过程 send()方法大致过程为: 设置序列化器->设置分区->放入队列缓存->等待时机push到broker 注: 不是直接发送给服务端,而是先在客户端把消息放入队列中, 然后由一个消息发送线程从队列中拉取消息,以批量的方式发送消息给服务端。 Kafka的记录收集器( RecordAccumulator)负责缓存生产者 客户端产生的消息,发送线程(Sender)负责读取记录收集器的批量消息,通过网络发送给服务端。为了保证客户端网络请求的快速响应,Kafka使用选择器( Selector) 处理网络连接和读写处理,使用 网络连接( NetworkClient)处理客户端网络请求。

消息队列是生产者将消息发布到消息队列,消费者去消费 以下为发布订阅模型,实现和其他系统解耦,如果没有解耦,代码的维护比较麻烦,每次增加消费者,都需要修改代码 优点:解耦合,减低维护成本 对于异步的系统,可以提高系统的性能 削峰的作用

缺点: 提高系统的复杂度,一旦消息队列出问题,系统就瘫痪