kafka消息队列-调研
背景
1 | kafka是最初由Linkedin公司开发,使用Scala语言编写,Kafka是一个分布式、分区的、多副本的、多订阅者的日志系统(分布式MQ系统),可以用于web/nginx日志,搜索日志,监控日志,访问日志等等。 |
整体架构
kafka名词解释和工作方式
1 | Producer :消息生产者,就是向kafka broker发消息的客户端。 |
kafka特性
1 | 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 |
可靠性(一致性)
1 | kafka(MQ)要实现从producer到consumer之间的可靠的消息传送和分发。传统的MQ系统通常都是通过broker和consumer间的确认(ack)机制实现的,并在broker保存消息分发的状态。 |
kafka系统扩展性
1 | kafka使用zookeeper来实现动态的集群扩展,不需要更改客户端(producer和consumer)的配置。broker会在zookeeper注册并保持相关的元数据(topic,partition信息等)更新。 |
kafka设计目标
1 | 高吞吐量是其核心设计之一。 |
Producer负载均衡和HA机制
1 | - producer根据用户指定的算法,将消息发送到指定的partition。 |
Consumer的pull机制
1 | 由于kafka broker会持久化数据,broker没有cahce压力,因此,consumer比较适合采取pull的方式消费数据,具体特别如下: |
Consumer与topic关系以及机制
1 | 本质上kafka只支持Topic.每个consumer属于一个consumer group;反过来说,每个group中可以有多个consumer.对于Topic中的一条特定的消息,只会被订阅此Topic的每个group中的一个consumer消费,此消息不会发送给一个group的多个consumer;那么一个group中所有的consumer将会交错的消费整个Topic. |
Producer均衡算法
1 | kafka集群中的任何一个broker,都可以向producer提供metadata信息,这些metadata中包含"集群中存活的servers列表"/"partitions leader列表"等信息.当producer获取到metadata信心之后, producer将会和Topic下所有partition leader保持socket连接; |
Consumer均衡算法
1 | 当一个group中,有consumer加入或者离开时,会触发partitions均衡.均衡的最终目的,是提升topic的并发消费能力. |
kafka broker集群内broker间replica(副本)机制
1 | kafka中,replication策略是基于partition,而不是topic;kafka将每个partition数据复制到多个server上,任何一个partition有一个leader和多个follower(可以没有); |
kafka判定一个follower存活与否的条件
1 | 1) follower需要和zookeeper保持良好的链接 |
总结
1 | 1) Producer端直接连接broker.list列表,从列表中返回TopicMetadataResponse,该Metadata包含Topic下每个partition leader建立socket连接并发送消息. |
参考:Kafka概要介绍
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2017/11/20/Apache-Kafka原理详解-进阶1/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!