1 Kafka是什么?
Apache Kafka是一个分布式发布-订阅消息传递系统和一个健壮的消息队列,可以处理海量数据,使您能够将消息快速从一个端点传递到另一个端点。Kafka适合离线和在线信息消费。Kafka式的消息被保存在磁盘上,并在集群中复制,以防止数据丢失。Kafka是建立在zookeeper同步服务之上的。它与Apache Storm和Spark集成得非常好,可用于实时流数据分析。
1.1 优势
Kafka的一些优势如下
- 可靠性:Kafka是分布式的、分区的、复制的和容错的。
- 扩展性:Kafka式消息系统无需停机即可轻松扩展..
- 持久性:Kafka使用分布式提交日志,这意味着消息尽可能快地保存在磁盘上,因此它是持久的。
- 性能:Kafka对于发布和订阅消息都有很高的吞吐量。即使存储了许多TB的消息,它也能保持稳定的性能。
1.2 用例
Kafka可以用在许多用例中。其中一些列举如下:
度量:Kafka通常用于运营监控数据。这包括聚集来自分布式应用程序的统计数据,以产生操作数据的集中馈送。
日志聚合方案:Kafka可以在整个组织中使用,从多个服务中收集日志,并以标准格式提供给多个消费者。
流处理:流行的框架,如 Storm和Spark可以从一个主题中读取数据,对其进行处理,并将处理后的数据写入一个新的主题,以便用户和应用程序使用。Kafka的强大耐用性在流处理领域也非常有用。
1.3 Kafka的需求
Kafka是处理所有实时数据馈送的统一平台。Kafka支持低延迟的消息传递,并保证机器出现故障时有一定的容错能力。它有能力处理大量不同的消费者。Kafka速度非常快,每秒执行200万次写操作。Kafka将所有数据保存到磁盘上,这实际上意味着所有的写入都将进入操作系统的页面缓存。这使得将数据从页面缓存传输到网络套接字非常有效。
2 名词解释
2.1 题(Topic)
属于特定类别的消息流称为主题。数据存储在主题中。
主题被分成多个分区。对于每一个话题,Kafka都对一个分区保持最小化。每个这样的分区包含不可变有序序列的消息。分区被实现为一组大小相等的段文件。
2.2 分区(Partition)
2.3 分区偏移量
2.4 分区副本
副本只不过是分区的备份。副本绝不是读写数据。它们用于防止数据丢失。
2.5 经纪人(Broker)
经纪人是负责维护发布数据的系统。每个代理的每个主题可能有零个或多个分区。假设,如果一个主题中有N个分区和N个代理,每个代理将有一个分区。
假设一个主题中有N个分区和超过N个代理(n + m),第一个N个代理将有一个分区,下一个M个代理将没有该特定主题的任何分区。
假设一个主题中有N个分区,并且少于N个代理(n-m),那么每个代理之间将有一个或多个分区共享。由于代理之间的负载分配不平等,因此不建议使用这种情况。
2.6 Kafka集群
Kafka集群包含多个经纪人。Kafka集群可以在不停机的情况下扩展。这些集群用于管理消息数据的持久性和复制。
2.7 生产者(Producer)
生产者是一个或多个Kafka主题的信息发布者。生产者向Kafka经纪人发送数据。每当生产者向代理发布消息时,代理只需将消息附加到最后一个段文件。实际上,消息将被附加到一个分区。生产者也可以向他们选择的分区发送消息。
2.8 消费者(Consumer)
消费者从经纪人那里读取数据。消费者订阅一个或多个主题,并通过从代理获取数据来消费已发布的消息。
2.9 Leader
Leader是负责指定分区的节点的读写。每个分区都有一台服务器充当领导者。
2.10 Follower
遵循Leader指令的节点称为Follower。如果Leader失败,其中一个Follower将自动成为新的Leader。Follower充当普通消费者,获取消息并更新自己的数据存储。