kafka概述与下一代消息队列

常用的消息中间件

消息中间件是当前处理大数据的一个非常重要的组件,用来解决应用解耦、异步通信、流量控制等问题,从而构建一个高效、灵活、消息同步和异步传输处理、存储转发、可伸缩和最终一致性的稳定系统。目前业界应用比较多的分布式消息中间件主要包括:ActiveMQ、RabbitMQ、Kafka、RocketMQ,虽然都是分布式消息中间件,但是每种消息中间件使用方式区别还是很大的。

ActiveMQ

  • 优点:Apache开源,功能集全,文档多,历史悠久,支持多语言客户端,使用简单。

  • 缺点:性能比较低、只支持主从架构,扩展性差。

RabbitMQ

  • 优点:用Erlang语言实现,性能比ActiveMQ高,功能丰富,支持协议多(AMQP、XMPP、SMTP)。

  • 缺点:虽然性能比ActiveMQ好,但比Kafka、RocketMQ还是有差距,只支持主从方式。扩展性差

Kafka

  • 优点:Apache开源,性能非常高,可靠性好,分布式扩展能力,支持多语言。

  • 缺点:管理工具少,支持协议少

RocketMQ

  • 优点:Apache开源,java语言实现,学习了Kafka的设计理念,继承了高性能、扩展性好。功能对企业应用支持比较好了,如定时消息。

kafka设计目标

以时间复杂度为O1的方式 提供消息持久化能力,即使对TB级的数据也能保证常数级时间的访问能力。

高吞吐率,即使在廉价的商用机器上,也能做单机10万条每秒的传输率。

支持消息分区,及分布式消费,保证每个分区的消息顺序消费

支持离线数据处理和实时数据处理

支持在线水平扩展

Kafka的特性

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

  • 可扩展性:kafka集群支持热扩展

  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

  • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

  • 高并发:支持数千个客户端同时读写

应用场景

消息系统:

KafKa作为一个优秀的消息系统,具有高吞吐量、内置的分区、备份冗余分布式的特点,为大规模的消息处理提供了一种很好的解决方案;

应用监控:

利用KafKa收集应用程序和服务器健康相关指标,如CPU占用率、IO、内存、连接数、TPS、QPS等,然后将指标信息进行处理

流处理:

需要将已经收集的流数据,如系统的点击、浏览事件,提供给其他流式计算框架进行处理,Spark Stream, Storm Flink;

持久性日志:

KafKa可以为外部系统提供一种持久性日志的分布式系统。日志可以在多个节点之间进行备份

Kafka概念

  • Message(消息):一条数据,每条消息都有一个键和对应的一个值。

  • producer(生产者):将消息发布到 topics。Producer 决定向 topic 分区的发布方式

  • consumer(消费者):消息的订阅者

  • Consumer Group:consumer的逻辑组,一条消息,只能被同一个Consumer Group消费一次。

  • topic(主题):消息的分类。消费者通过订阅Topic来读取数据

  • partition(分区):一个topic至少一个分区,不同分区不保证消息的消费顺序。更多的分区意会着,更高吞吐能力。同时会打开更多的文件句柄。进程打开的文件句柄是目前Kafka系统的一大瓶颈。Kafka broker使用的是本地文件系统,这将会影响Kafka往流式架构发展,也许Kafka以后会支持分布式的文件系统。如MapR Stream.

  • Broker:Kafka 以分布式系统/集群方式运行。集群中的每个节点称一个 Broker,负责消息的持久化,可以横向扩展。

  • Replication:Kafka消息的备份,实现数据冗余,保障数据尽量不丢失;

  • Offset(偏移量):消息是存储在broker上的分区里

  • ISR(In-sync Replica):可用同步的副本列表,ISR<Replication,消息在所有复本同步的过程中,有的节点同步速度比较慢,如果和Leader差比较多,这个时这个节点的复本就会被从ISR中移除,当同步进度跟上leader后重新加入ISR

Kafka的创新

消息的持久化的时间:不再需要跟踪特定消息的读取情况,设定消息的保留时间。确保消息被读取之后再删除。

消费者可以自己管理消息偏移量offset,Kafka可以将消息存储在文件系统上,读取消息时就和读文件一样,可以顺序性的读消息。因此Kafka的处理消息的速度非常快。

Kafka的缺点

Topic和分区数量问题,Kafka在上万的topic面前,性能会非常低下。

手动均均衡分区负载,不能自动实现负载均衡

没有固定的序列化机制,如果大规模使用时,不一样的序列机制,就无法兼容通讯

镜像不足,Kafka只是简单把消息转发,生产者和消费者却不能转移过去

下一代的消息系统-MapR Stream

被称为下一代的消息系统,使用MapR平台的分布式文件系统,在存储上比KafKa更加强大。它的应用是在Kafka等消息队列都无法满足时,才考虑的一个消息系统。当前的架构都是请求响应型,无法满足现实生活的实时性,像当前的直播系统,或者其他实时的系统,对消息实时性有很高的要求,主是、数据量都很大时,Kafka消息队列可能也无法满足。

猜你喜欢

转载自www.cnblogs.com/Java-no-1/p/11029041.html