分布式的消息系统Kafka

版权声明:本文为博主原创文章,未经博主允许不得转载。http://blog.csdn.net/aspirinvagrant https://blog.csdn.net/fenghuangdesire/article/details/50651971

What is Kafka?

Kafka是一个分布式的发布-订阅(publish-subscribe)消息系统,提供了分区的和可复制的提交日志服务,用于处理实时的活动流数据,如日志和指标集合。

Kafka的基本概念

  • Topics: Kafka处理的消息流(feeds of messages)的不同分类
  • Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列,partition中的每条消息都会被分配一个有序的id(offset)。
  • Producers: 能够发布消息到topic的任何对象,已发布的消息保存在一组服务器中(Broker或者Kafka集群);
  • Consumers: 订阅一个或多个topic,并从broker拉取数据,从而消费这些已发布的消息;
  • Broker: 缓存代理,Kafka集群包含一个或多个服务器,这些服务器被称为broker;
  • TCP Protocol: 客户端和服务端交流的协议;
    Kafka的基本概念
    这里写图片描述

Kafka架构

Kafka架构
Kafka集群中包含多个Producers,Consumers,Brokers以及一个Zookeeper集群,Producers可以是web前端或服务器日志,Consumers可以是Hadoop集群,安全系统,实施监控等,broker数量越多,集群的吞吐率越高,Kafka的水平扩展性越好。Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumers发生变化时进行rebalance。此外,Kafka集群几乎不需要维护任何consumer和producer状态信息以及消息的offset,这些信息由zookeeper保存。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。

Kafka设计

简单存储

每个topic都有一个自增长的日志,一个日志物理上为相同大小的一组分段文件,消息通过日志中的逻辑偏移量来公开。为了均衡负载,将topic分成多个partition,每个broke存储一或多个partition。
简单存储

高效传输

  • 批量发送接受;
  • JVM不缓存消息;
  • 依赖文件缓存;
  • 零拷贝传输:文件 -> socket

参考资料
Apache Kafka: Next Generation Distributed Messaging System
Kafka: a Distributed Messaging System for Log Processing

猜你喜欢

转载自blog.csdn.net/fenghuangdesire/article/details/50651971