201902-09 消费者实现逻辑-kafka知识体系(四) NEW 上篇文章分享kafka broker 的实现原理、数据的存储结构和消息持久化相关的东西,那消息存储完了之后,怎么被消费端消费呢,本文来聊一聊Kafka 消费端的那些事儿。1)拉取机制Kafka生产端是推的机制即Push,消费端是拉的机制即Pull。2)Pull的优缺点优点是消费端可以自己控制消息的读取速度和数量;缺点是不知道服务端有没有数据,所以要一直pull或隔一定时间pull,可能要pull多次并等待。3)消息投递语义:Kafka默认保证at-least-once del... Read More >
201902-08 Broker的实现逻辑-kafka知识体系(三) NEW 上篇文章分享了kafka 生产端的逻辑,以及消息发送到缓存后由sender线程发送到Broker,那么Broker 是怎么进行数据接收和持久化的呢?下面我们从Broker 的网络设计聊起。Broker 网络设计kafka的网络设计和Kafka的调优有关,这也是为什么它能支持高并发的原因。Kafka的网络三层架构首先客户端发送请求全部会先发送给一个Acceptor,broker里面会存在3个线程(默认是3个),这3个线程都是叫做processor,Acceptor不会对客户端的... Read More >
201902-07 生产者的实现逻辑-kafka知识体系(二) NEW kafka 是单条发送还是批量发送消息?kafka 怎么做到单条发送?kafka 发送消息是顺序的吗?生产者什么情况下可能会频繁FullGC?消息发送的逻辑上帝视角来看消息发送的流程。生产者的设计消费发送机制:1)序列化器:序列化消息对象转成字节数组,然后通过网络传输。2)分区器:计算消息发往的具体分区;如果显示指定了partition,便不会走分区器。3)消息缓冲池:客户端的消息缓冲池,默认大小32M,见参数buffer.memory。4)批量发送:缓冲池中消息会按batc... Read More >
201902-06 基础概念、架构和新版的升级-Kafka知识体系(一) 概念 Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用 Scala (JAVA)语言编写,目前是Apache 的开源项目。 主要解决应用解耦、异步消息、流量削峰等问题。 Kafka实际上也是一个主从架构,有一个Controller角色即控制器,协调管理整个集群。关键术语brokerKaf... Read More >
201902-05 大数据专家面试篇之Kafka篇 1、Kafka 都有哪些特点?高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。可扩展性:kafka集群支持热扩展持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)高并发:支持数千个客户端同时读写2、请简述下你在哪些场景下会选择 Kafka?日志... Read More >
201505-07 redis实现消息消费确认(ack机制) 消息中间件有很多,例如 ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ。这些消息系统都很专业,无论是可靠性,容错性,高性能都有自己独特的特点,那为什么我们还要用redis做消息队列1.为什么用redis做消息队列1.1拥有普通消息组件的特性redis的list,set等集合都支持pop,push这些出栈入栈的操作,详见 redis命令redis支持订阅发布模式能依靠双队列实现消息确认模式1.2轻量易用搭建一个m... Read More >
201504-27 Rabbitmq官方的六种工作模式 RabbitMQ的六种工作模式:官网介绍:https://www.rabbitmq.com/getstarted.html这里简单介绍下六种工作模式的主要特点:简单模式:一个生产者,一个消费者work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。订阅模式:一个生产者发送的消息会被多个消费者获取。路由模式:发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由keytopic模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”... Read More >
201504-26 RabbitMQ的PHP实现代码 接下来看一下创建队列及接收消息的TP5.1示例:需要提前启动消费者,绑定交换机与队列,并指定路由键1.测试多消费者监听同一个事件,打开2个消费者,启动生产者,发现2个消费者可以同时收到消息2.测试消费者挂掉时,消息是否丢失,停掉一个消费者1,启动生产者,再启动消费者1,发现还可以读取到数据,说明数据没有丢失/** * 生产者 * @param * @return true * @throws \Excepti... Read More >
201504-25 RabbitMQ - 架构及工作原理 1. 系统架构从示意图可以看出消息生产者并没有直接将消息发送给消息队列,而是通过建立与Exchange的Channel,将消息发送给Exchange,Exchange根据规则,将消息转发给指定的消息队列。消费者通过建立与消息队列相连的Channel,从消息队列中获取消息。这里谈到的Channel可以理解为建立在生产者/消费者和RabbitMQ服务器之间的TCP连接上的虚拟连接,一个TCP连接上可以建立多个Channel。 RabbitMQ服务器的Exchange对象可... Read More >
201504-24 kafka和rabbitmq什么区别,各自适合什么场景? RabbitMQ1.RabbitMQ遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上,适合企业级的消息发送订阅。2.RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consum... Read More >
201504-11 中间件RabbitMQ在生产环境占用CPU过多的情况 我们项目中用的消息中间件是RabbitMQ,这个消息中间件在使用起来停方便的,也比较健壮,但是使用不当,会对服务器造成很大的压力,会把CPU占用比占到70%左右,今天就来分析一下造成这个结果的原因。要想具体查看rabbitmq里面各个服务的占用比,需要开启一个插件,就是rabbitmq_top,在服务器输入rabbitmq-plugins list可以查看安装的插件:安装好这个插件,我们就可以查询rabbitmq内部各个服务的占用比了,登录rabbitmq提供的UI管理界面,... Read More >