消息引擎:用于在不同系统之间传输消息
传输消息的格式:
kafka传输消息格式:二进制的字节序列
传输消息的协议:
kafka传输消息的协议:以上两种都支持
JMS(Java Message Service):支持上面两种消息引擎模型,但它非传输协议,而仅仅是一组API,ActiveMQ、RabbitMQ、IBM 的 WebSphere MQ 和 Apache Kafka都支持JMS规范,但kafka没有完全遵照JMS规范
消息引擎系统的优点:
1 削峰填谷:缓冲上下游瞬时突发流量,使其更平滑
2 发送放和接收方松耦合
生产者:像主题发布消息的客户端应用
消费者:订阅这些主题消息的客户端程序
生产者和消费者可以同时向多个主题发布和订阅消息,生产者和消费者统称为客户端
kafka的服务端:称为Broker的服务进程,一个kafka集群由多个Broker组成,Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化
kafka实现高可用的手段:
1 broker集群,一台服务器宕机,别的服务器上的broker可以继续对外提供服务
2 备份机制Replication:副本类型有两种,leader 和follower,leader对外提供服务,与客户端程序进行交互,follower只单纯与leader进行同步,不能与外界进行交互
3 重平衡(rebalance):假设消费组内某个实例挂了,kafka能自动检测到,然后把和failed实例之前负责的分区转移给其他活着的消费者
副本的工作机制:生产者想leader写消息,消费者从leader读消息,follower想leader发送同步请求
kafka实现伸缩性的手段:
partition:将每个主题划分成多个分区,每个人分区是一组有序的消息日志,生产者生产的每条消息只会被发送到一个分区中,每个分区可以配置若干个副本,生产者向分区写入消息,每条消息在分区中的位置信息由一个叫位移(Offset)的数据来表征,分区位移从0开始
Kakfa的三层消息架构:
第一层是主题层,每个主题可以配置 M 个分区,而每个分区又可以配置 N 个副本。
第二层是分区层,每个分区的 N 个副本中只能有一个充当领导者角色,对外提供服务;其他 N-1 个副本是追随者副本,只是提供数据冗余之用。
第三层是消息层,分区中包含若干条消息,每条消息的位移从 0 开始,依次递增。
最后,客户端程序只能与分区的领导者副本进行交互。
Kafka Broker持久化数据:
Kafka 使用消息日志(Log)来保存数据,一个日志就是磁盘上一个只能追加写(Append-only)消息的物理文件,但是如果你不停的向一个日志写入消息,最终也会耗尽磁盘空间,因此kafka要定期的删除消息以回收磁盘,通过日志段机制(log Segment),在kafka底层,一个日志又进一步细分为一个新的日志段,并将老的日志段封存起来,kafka在后台会有定时任务定期检查老的日志段是否能够被删除
kafka的P2P消费模式:
消费组,多个消费者实例共同组成一个组来消费一组主题,这个主题中的每个分区都只会被组内的一个消费者实例消费,其他的消费者实例不能消费它,引入消费组的原因,主要是为了提升消费者端的吞吐量,多个消费者实例同事消费,加速整个消费端的吞吐量。这里的消费组实例可以是运行消费者应用的进程,也可以是一个线程。
消费者位移:每个消费者在消费消息的过程中有个字段记录当前消费到分区的哪个位置上,这个字段叫消费者位移(consumer offset),这个位移和上面的offset不是一个概念,offset表示的是分区内的消息位置,是不变的,即一旦消息被成功写入到一个分区上,他的位移值就固定了。而消费者位移则不同,是随时可以变化的,他是消费者消费进度的指示器,每个消费者都有自己的消费者位移。
Kafka 是消息引擎系统,也是分布式流处理平台。
kafka设计特性:
今天 Apache Kafka 是和 Apache Storm、Apache Spark 和 Apache Flink 同等级的实时流处理平台。
上一篇:RabbitMQ交换机与队列