本帖最后由 zxczhkzxc 于 2017-5-9 17:51 编辑
问题导读:
1 如何理解kafka的多个生产者模式?
2 如何理解kafka的多个消费者模式?
3 kafka的基于硬盘的消息保存是如何实现的?
4 kafka的可扩展性如何实现?
5 kafka如何取得高性能的表现?
翻译内容来自《Kafka 权威指南》
相关内容:
kafka权威指南 第一章第1节 【中文版】
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21648
Kafka权威指南 —— 第一章第2节 初识Kafka
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21652
kafka权威指南 第一章第3节 为什么选择kafka
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21695
kafka权威指南 第一章第4节 【中文版】
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21681
kafka权威指南 第一章第5节 Kafka的起源
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21691
为什么选择Kafka
对于发布-订阅消息系统有很多选择,是什么促使Apache Kafka是一个很好的选择呢?
多个生产者
无论kafka多个生产者的客户端正在使用很多topic还是同一个topic ,Kafka都能够无缝处理好这些生产者。这使得kafka成为一个从多个前端系统聚合数据,然后提供一致的数据格式的理想系统. 例如, 一个通过多个微服务向用户提供内容的站点, 可以为统计page view而只设立一个topic, 所有的服务将page view以统一的格式写入这个topic. 消费程序能够以统一的数据格式来接收page view数据, 而不需要去协调多个生产者流.
多个消费者
除了多个生产者之外,kafka也被设计为多个消费者去读取任意的单个消息流而不相互影响;而其他的很多消息队列系统,一旦一个消息被一个客户端消费,那么这个消息就不能被其他客户端消费,这是kafka与其他队列不同的地方;同时多个kafka消费者也可以选择作为一个组的一部分,来分担一个消息流,确保这整个组,这个消息只被消费一次.
基于硬盘的消息保存
Kafka不仅能够处理多个消费者,而且能够持久的保存消息这也意味着消费者不一定需要实时的处理数据。消息将按照持久化配置规则存储在硬盘上。这个可以根据每个topic进行设置,允许根据不同的消费者的需求不同 设置不同消息流的保存时间不同, 持久化保存意味着一旦消费者来不及消费或者突然出现流量高峰, 而不会有丢失数据的风险.同样也意味着消息可以由consumer来负责管理, 比如消费消息掉线了一段时间,不需要担心消息会在producer上累积或者消息丢失, consumer能够从上次停止的地方继续消费.
可扩展性
Kafka最开始设计的时候就把灵活扩展考虑到里面,使其能够处理任意数量的数据;用户刚开始可以用一台进行验证其相关的理念,然后将其扩展成小的三台broker的开发集群,随着数据的增加,甚至扩展为数十台,上百台规模的大集群。扩展可以在集群正常运行的时候进行,对于整个系统的运作没有影响;这也就意味着,对于很多台broker的集群,如果一台broker有故障,不影响为client提供服务.集群如果要同时容忍更多的故障的话, 可以配置更高的replication factors. Replication在第6章中会详细探讨.
高性能
上面的这些特性使得Apache Kafka 成为一个能够在高负载的情况下表现出优越性能的发布-订阅消息系统。Producer, consumer和broker都能在大数据流的情况下轻松的扩展. 扩展过程能够在依然提供从生产到消费亚秒级服务的情况下完成.
|