kafka的使用
简介
Kafka是一个分布式(distributed)、支持分区的(partitioned)、多副本的(replicated),基于zookeeper协调的分布式消息系统,它最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写。
Kafka对消息保存时根据TOpic进行归类,发送消息者成为Producer,消息接收者成为Consumer。kafaka集群有对个kafka实例组成,每个实例(server)成为broker。无论是kafaka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性,主要是保存一些meta信息。所以如果没有zookeeper,kafaka则无法使用。
一个Topic可以认为是一类消息,每个Topic将被分成多个partition,每个partition在存储层面是append log文件,任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long类型数字,它唯一标记一条消息。kafka并没有提供其他额外的索引机制俩存储offset,因为在kafka中几乎不允许对消息进行随机读写。
kafka不同于其他消息处理队列的是:即使消息被消费,消息仍然不会被立即删除,日志文件将会根据broker中的配置要求,保留一定的时间后删除,无论其中的消息是否被消费。kafaka通过这种手段来释放磁盘空间,以及减少消息消费之后对文件内容改动的磁盘IO开支。
对于consumer而言,它需要保存消费消息的offset,对于offset的保存和使用,由consumer控制。当consumer正常消费消息时,offset将会线性的向前驱动,即消息将依次顺序被消费,事实上consumer可以使用任意顺序消费消息,它只需要将offset重置为任意值。
kafka集群几乎不需要维护任何consumer和producer状态信息,这些信息由zookeeper保存,因此producer和consumer的客户端实现非常轻量级,它们可以随意离开,不会对集群造成额外影响。。
kafka中partition的设计最根本的原因是kafka是基于文件存储的,通过分区,可以将日志分散在多个server中,避免日志文件尺寸达到单机磁盘的上限。每个partition都会被当前的server,即kafka实例保存。可以将一个topic切分到任意多个partition来保存消费消息,这就意味着越多的partition就可以容纳更多的consumer,提升并发消费的能力。
一个Topic的多个partition,被分布在kafaka集群中的多个server上,每个server负责partition中消息的读写操作,此外kafka还可以配置partition需要备份的个数(replicas),每个partition将会被备份到多台机器上以提高可用性。
配置了replicated,意味着需要对多个备份进行调度,每个partition都有一个server为"leader",leader负责所有的读写操作,如果leader失效,那么将会有其他的follower来接管成为新的leader。follower只是单调的和leader跟进同步消息。由此可以得知:作为leader的server承载了全部的请求压力,因此从集群的整体考虑,多少个partition就意味着多少个leader,kafka会将leader均衡的发散到每一个实例中,来确保性能稳定。
mac安装kafka
brew install kafka
安装过程依赖zookeeper
软件位置
配置文件位置
作者:赵盼盼
出处:https://www.cnblogs.com/zhaopanpan/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
⇩ 关注或点个喜欢就行 ^_^
关注我