初识Kafka

10 篇文章 1 订阅
2 篇文章 0 订阅

一、Kafka简介

kafka是LinkedIn开发的用于日志数据处理的流式消息处理系统。官网上说kafka is a distributed、partitioned、replicated commit logservice.这句话充分体现了kafka的特性。kafka是首先是一个用于处理流式数据的日志处理系统,然后他是分布式的,他支持分区便于横向拓展,他具有冗余备份功能。由Scala和Java编写,也是Apache项目的一部分。目前kafka主要有三个方面的用途,分别是消息订阅与发布系统、消息存储、流式数据处理。

二、Kafka的特性

  1. 持久化:以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。通过将数据持久化到硬盘以及replication防止数据丢失。
  2. 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
  3. 可扩展性:当需要增加broker结点时,新增的broker会向zookeeper注册,而producer及consumer会根据注册在zookeeper上的watcher感知这些变化,并及时作出调整。
  4. 消息被处理的状态是在consumer端维护,而不是有server端维护,当消费失败能自动平衡。
  5. 支持online和offline的场景

三、Kafka的逻辑架构

这里写图片描述

四、Zookeeper在kafka的作用

  1. 无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。
  2. Kafka使用zookeeper作为其分布式协调框架,很好的将消息生产、消息存储、消息消费的过程结合在一起。
  3. 同时借助zookeeper,kafka能够生产者、消费者和broker在内的所以组件在无状态的情况下,建立起生产者和消费者的订阅关系,并实现生产者与消费者的负载均衡。
  4. zookeeper记录broker中的消息是否被消费,是否被消费成功。

五、消费方式

由于kafka broker会持久化数据,broker没有内存压力,因此,consumer非常适合采取pull的方式消费数据,具有以下几点好处:
1. 简化kafka设计
2. consumer根据消费能力自主控制消息拉取速度
3. consumer根据自身情况自主选择消费模式,例如批量,重复消费,从尾端开始消费等

六、消息队列MQ对比

RabbitMQ:遵循AMQP实现,传统的messaging queue系统实现,基于Erlang语言开发,用在对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量还在其次。支持协议多,包括XMPP、SMTP、STOMP。更适合于企业级的开发。实现Broker构架,消息在发送给客户端时先在中心队列排队。非常重要的消息队列,对路由(Routing),负载均衡(Load balance),或者数据持久化都有很好的支持。

ZeroMQ:只是一个网络编程的Pattern库,将常见的网络请求形式模式化、组件化。号称最快的消息队列系统,尤其针对大吞吐量的需求场景,擅长的高级/复杂的队列,ZeroMQ能实现RabbitMQ不擅长的高级复杂队列,但是技术也复杂,开发人员需要自己组合多种技术框架,技术复杂度是一个挑战。仅提供非持久性的队列,如果Down机,数据将丢失。

ActiveMQ:Apache下的一个子项,类似ZeroMQ,能够以代理人和点对点的技术实现队列 。

Redis:是一个key-Value的NOSql数据库,但也支持MQ功能,数据量较小,性能优于RabbitMQ,可以完全当做一个轻量级的队列使用。Redis在数据量大的时候入队较慢,数据超过10K就慢的无法忍受,Redis出队则无论数据量大小性能都不错。

Kafka:LinkedIn开源的MQ系统,基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的是用于日志收集和传输,0.8开始支持复制,不支持事务,适合产生大量数据的互联网服务的数据收集业务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值