Kafka介绍
kafka是一种分布式的,基于发布/订阅的消息系统。它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。
Kafka相关术语
- Broker :kafka集群包含一个或多个服务器,这种服务器被称为broker。
- Topic:每条发布到kafka集群的消息都有一个类别,这个类别被称为topic。(物理上不同topic的消息分开存储,逻辑上一个topic的消息虽然保存于一个或多个broker上但用户只需指定消息的topic即可生产或消费数据而不必关心数据存于何处)
- Producer:负责发布消息到Kafka broker
- Consume:消费消息。每个consumer属于一个特定的consuer group(可为每个consumer指定group name,若不指定group name则属于默认的group)。使用consumer high level API时,同一topic的一条消息只能被同一个consumer group内的一个consumer消费,但多个consumer group可同时消费这一消息。
- Partition:parition是物理上的概念,每个topic包含一个或多个partition,创建topic时可指定。parition数量。每个partition对应于一个文件夹,该文件夹下存储该partition的数据和索引文件。
Kafka架构
一个典型的kafka集群中包含若干producer(可以是web前端产生的page view,或者是服务器日志,系统CPU、memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干consumer group,以及一个 Zookeeper 集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。producer使用push模式将消息发布到broker,consumer使用pull模式从 broker订阅并消费消息。
Kafka特性
- 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
- 高吞吐量 :即使是非常普通的硬件kafka也可以支持每秒数百万的消息。
- 支持Hadoop并行数据加载。
Kafka性能高的原因
- 零拷贝技术。
- 利用了 PageCache 缓存。
- 磁盘顺序写。
Kafka 的优缺点
优点
- 支持多个生产者和消费者。
- 支持broker的横向拓展。
- 副本集机制,实现数据冗余,保证数据不丢失。
- 通过topic将数据进行分类。
- 通过分批发送压缩数据的方式,减少数据传输开销,提高吞吐量。
- 支持多种模式的消息。
- 基于磁盘实现数据的持久化。
- 高性能的处理信息,在大数据的情况下,可以保证亚秒级的消息延迟。
- 一个消费者可以支持多种topic的消息。
- 对CPU和内存的消耗比较小。
缺点
- 由于是批量发送,所以数据达不到真正的实时。
- 对于mqtt协议不支持。
- 不支持物联网传感数据直接接入。
- 只能支持统一分区内消息有序,无法实现全局消息有序。
- 监控不完善,需要安装插件。
- 需要配合zookeeper进行元数据管理。
- 会丢失数据,并且不支持事务。
- 可能会重复消费数据,消息会乱序,可用保证一个固定的partition内部的消息是有序的,但是一个topic有多个partition的话,就不能保证有序了,需要zookeeper的支持,topic一般需要人工创建,部署和维护一般都比mq高。