Kafka 是LinkedIn 开发的一个高性能、分布式的消息系统,广泛用于日志收集、流式数据处理、在线和离线消息分发等场景。虽然不是作为传统的MQ来设计,在大部分情况,Kafaka 也可以代替原先ActiveMQ 等传统的消息系统。
Kafka 将消息流按Topic 组织,保存消息的服务器称为Broker,消费者可以订阅一个或者多个Topic。为了均衡负载,一个Topic 的消息又可以划分到多个分区(Partition),分区越多,Kafka并行能力和吞吐量越高。
Kafka 集群需要zookeeper 支持来实现集群,最新的kafka 发行包中已经包含了zookeeper,部署的时候可以在一台服务器上同时启动一个zookeeper Server 和 一个Kafka Server,也可以使用已有的其他zookeeper集群。
和传统的MQ不同,消费者需要自己保留一个offset,从kafka 获取消息时,只拉去当前offset 以后的消息。Kafka 的scala/java 版的client 已经实现了这部分的逻辑,将offset 保存到zookeeper 上。每个消费者可以选择一个id,同样id 的消费者对于同一条消息只会收到一次。一个Topic 的消费者如果都使用相同的id,就是传统的 Queue;如果每个消费者都使用不同的id, 就是传统的pub-sub.
如果在MQ的场景下,将Kafka 和 ActiveMQ 相比:
Kafka 的优点
分布式可高可扩展。Kafka 集群可以透明的扩展,增加新的服务器进集群。
高性能。Kafka 的性能大大超过传统的ActiveMQ、RabbitMQ等MQ 实现,尤其是Kafka 还支持batch 操作。下图是linkedin 的消费者性能压测结果:
容错。Kafka每个Partition的数据都会复制到几台服务器上。当某个Broker故障失效时,ZooKeeper服务将通知生产者和消费者,生产者和消费者转而使用其它Broker。
Kafka 的不利
重复消息。Kafka 只保证每个消息至少会送达一次,虽然几率很小,但一条消息有可能会被送达多次。
消息乱序。虽然一个Partition 内部的消息是保证有序的,但是如果一个Topic 有多个Partition,Partition 之间的消息送达不保证有序。
复杂性。Kafka需要zookeeper 集群的支持,Topic通常需要人工来创建,部署和维护较一般消息队列成本更高
相关推荐
RocketMQ、ActiveMQ 、Kafka对比官方原版文档翻译。 SDK客户端 协议和规范 订阅消息 预定消息 批量消息 广播消息 消息过滤 服务器触发重新传递 消息存储 消息追溯 消息优先级 高可用性和故障转移 消息跟踪 配置 管理...
消息中间件技术选型,ActiveMQ、Apollo、RabbitMQ、RocketMQ、Kafka、Redis、ZeroMQ多维护对比分析
1.2 对比KafKaKafka性能超过ActiveMQ等传统MQ工具,集群扩展性好 1.3 对比Redis 其实Redis本身利用List可以实现消息队列的功
JMS规范详情 AMQP协议详情 RocketMQ RabbitMQ Kafka ActiveMQ ......对比
ActiveMQ、RabbitMQ、RocketMq、Joram、HornetQ、OpenMQ、MuleMQ、SonicMQ、ZeroMQ、Kafka 从关注度,成熟度,社区活跃度、文档、特点、授权方式、语言、事务、集群、持久化、协议,部署方式、UI、评价等诸多维度
50多页超详细,ActiveMQ消息总线设计方案,包含各种消息队列技术对比
RabbitMq / Kafka 最好,ActiveMq 次之,ZeroMq 最差。当然ZeroMq 也可以做到,不过自己必须手动写代码实现,代码量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用性。 4.高并发 毋庸置疑,...
java面试笔试资料包括JAVA基础核心知识点深度学习Spring面试题等资料合集: JAVA核心知识点整理-282页 Java与哈希算法.docx Java中Lambda表达式的使用....面试题:Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点.doc
文档中主要介绍RabbitMQ、ZeroMQ、ActiveMQ、Redis、Kafka、RocketMQ的不同使用场景,以及每种不同类型直接的区别对比;每种不同类型的对列之间的性能对比和建议使用场景。
几种常见消息队列的对比: ActiveMQ 功能强劲但是并发性能不够好,不适用于高并发的复杂的项目。 架构模式: Kafka 刚开始是为了收集和传输日志,追求高吞吐量(性能很高);但是缺点是不支持事务,不会对消息的重复...