一、kafka简介
1、kafka是一种高吞吐量的分布式发布订阅消息系统,不像activeMQ一样,它只是一个队列
它的里面基本都是topic,这样的一种结构。它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。kafka专门为大数据而生的。
主要在大数据当中结合fuame+kafka做实时日志数据分析。
2、kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
①、通过0(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。(文件追加的方式写入数据,过期的数据定期删除)。
②、高吞吐量:即使是非常普遍的硬件kafka也可以支持每秒数百万的消息。
反而针对少量的数据,它的效率并不高,如果大的数据量的话,它的效率就最高。
kafka的6到8倍的效率:
③、支持通过kafka服务器和消费集群来区分消息
④、支持hadoop并行数据加载,因为kafka在分区里面发布消息是相互不受影响的,是完全隔离的。
问题:怎么保证kafka消费的消息是有序的呢?
回答:定义一个分区就可以了。
二、使用场景:
1、Messaging
对于一些常规的消息系统,kafka是个不错的选择,partitions(分区:主要作用保存副本,为了达到容错的效果)/replication(副本)和容错,可以使kafka具有良好的扩展性和性能优势。不过到目前位置,我们应该很清除的认识到,kafka并没有提供JMS中的"事务性"(可能会发生数据丢失),"消息传输担保(消息确认机制)","消息分组"等企业特性;kafka只能使用作为”常规“的消息系统,在一定程度上,尚未确保消息的发送与接收绝对可靠(比如,消息重发,消息发送丢失等)。所以在kafka中数据丢失是很正常的,所以日志用kafka来做分析。如果把重要的数据放入到kafka中也不是很可取的方案。
2、Websit activity tracking
kafka可以作为”网站活性跟踪“的最佳工具;可以将网页/用户操作等信息发送到kafka中,并实时监控,或者离线统计分析等。
3、Log Aggregation
kafka的特性决定它非常适合作为”日志收集中心";application可以将操作日子“批量”“异步”的发送到kafka集群中,而不是保存在本地或者DB中,kafka可以批量提交消息/压缩消息等,这对producer端而言,几乎感觉不到性能大的开支。此时consumer端可以使hadoop等其他系统化的存储和分析系统。如果大量的数据的话,可以存储到hbase中,然后由kafka拉取数据,做数据的分析。
三、kafka的架构
首先是一堆生产者,生产消息,partition代表一个分区,分区里的消息是有序的,一个生产者将一个消息发送到两个分区。而每一个分区都可以对应一个消费者,甚至是一个消费组。
kafka集群是依赖zookeeper(协调服务的)来做leader选举的。它最新的消息是在最前面。最旧的消息应该在最后面。慢慢的是由新数据变为老数据。
producers:生产者
message:消息
Topic:Topic可以按照分区来分割的,分区与分区之间可以并行的接收到消息的。
如果整个集群中只有一个分区的话,那么整个集群的消费是有顺序性的。
整个的架构模型:生产者将消息push给分区。然后由消费者进行poll拉取消息。
怎么知道拉取的是最新的数据呢,需要配置一个参数
四、kafka中的术语
在深入理解kafka之前,先介绍下kafka中的术语,下图展示了kafka的相关术语以及之间的关系:
首先生产者写数据到分区里面,一个生产者可以写两份数据到分区里面去。上面的topic总共 有三个分区,比如在写的时候,produce1它发送了两个消息到分区里面0和1,也向分区Partition2里面发送了两个消息0和1.这时只能有一个分区提供0和1给消费。这个时候就会进行一个选举,选举出一个leader出来,然后跟随着也就是follower的消息当成副本。
在kafka Broker整个Kafka集群当中,有三个备份。消费组可以两两为一组。也可以一个为一组。也可以三个为一个组。主要为了保证每个消息者都有消息可消费,尽量的去均等。
上图中一个topic配置了三个partition。Partition1有两个 offset:0和1。Partition2有 4个offset.Patition3有1个offset。副本的id和副本所在的机器的id恰好相同(也就是说副本id和brokerId是一样的)。
如果一个topic的副本数为3,那么kafka将在集群中为每个partition创建3个相同的副本。集群中每个broker存储一个或者多个partition。多个producere和consumer可同时生产和消费数据。kafka高性能的地方在于一个也能选举,自己就为leader。
3.1、broker
kafka集群包含一个或多个服务器,服务器节点称为broker。
broker存储topic的数据,如果某个topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition。
如果某topic有N个partition,集群有N+M个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个broker不存储该topic的partition数据。
如果某topic有N个partition,集群中