Kafka(一):简介

简介

  • Kafka是一个分布式流平台(消息系统)。

  • Kafka用于流处理,网站活动跟踪,指标收集和监视,日志聚合,实时分析,CEP,将数据导入Spark,将数据导入Hadoop,CQRS,重播消息,错误恢复和保证分布式 提交用于内存计算(微服务)的日志。

  • Kafka is used for real-time streams of data(实时数据流的处理), to collect big data, or to do real time analysis (or both).

  • Kafka is a distributed streaming platform that is used publish and subscribe to streams of records.

    • Kafka是一个分布式流平台,用于发布和订阅记录流---我们可以通过Kafka发布或者获取消息记录。

    • 备份机制保证数据安全性:Kafka is used for fault tolerant storage(用于容错储存)---Kafka replicates topic log partitions to multiple servers. (将主题日志分区复制到多个服务器)

    • 高吞吐、低延迟Kafka is designed to allow your apps to process records as they occur. (让你可以实时操作记录)

    • 高效的持久化提供稳定性和速度:Kafka is fast and uses IO efficiently by batching and compressing records.通过批处理和压缩记录来有效地使用IO。

    • Kafka is used for decoupling data streams.(Kafka用于解耦数据流)

  • Kafka is used to stream data into data lakes, applications, and real-time stream analytics systems.(可以把数据流送到数据池、应用或者实时数据分析系统,比如Hadoop)

    • 高并发

  • 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,Kafka是一个可行的解决方案。Kafka的目的是通过并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。

    Kafka官网:http://kafka.apache.org/

    帮助文档页面:http://kafka.apache.org/documentation.html

    wiki页面:https://cwiki.apache.org/confluence/display/KAFKA/Index

Kafka结构

 

 

  1. Broker: 一个Kafka 集群包含一个或者多个服务器,这些服务器被称为broker。

  2. Topic: 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储;逻辑上一个Topic的消息虽然保存于一个或多个broker上,但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)

  3. Partition: topic是分区的(partition),Partition是物理上的概念,每个Topic包含一个或多个Partition。

  4. Producer: 消息生产者,负责发布消息到Kafka broker。

  5. Consumer: 消息消费者,向Kafka broker读取消息的客户端。

  6. Consumer Group: 每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

Topic

  • 每一个topic是一组消息的归纳,kafka对每个topic进行了分区处理(partition)。

  • 每个分区都由一系列有序的、不可变的消息组成,这些消息被连续的追加到分区中。

  • 分区中的每个消息都有一个连续的序列号叫做offset,用来在分区中唯一的标识这个消息。

  • 在一个可配置的时间段内,Kafka集群保留所有发布的消息,不管这些消息有没有被消费。

    • 比如,如果消息的保存策略被设置为2天,那么在一个消息被发布的两天时间内,它都是可以被消费的。之后它将被丢弃以释放空间。Kafka的性能是和数据量无关的常量级的,所以保留太多的数据并不是问题(只要磁盘够)。

  • 每个consumer唯一需要维护的数据是消息在日志中的位置,也就是offset,通过重新设置该值,可以读取旧的消息数据。

Partition

  • 每个分区在Kafka集群的若干服务中都有副本,这样这些持有副本的服务可以共同处理数据和请求,副本数量是可以配置的。副本使Kafka具备了容错能力。

  • 每个分区都由一个服务器作为“leader”,零或若干服务器作为“followers”

    • leader负责处理消息的读和写

    • followers则去复制leader

    • 如果leader down了,followers中的一台则会自动成为leader。

    • 集群中的每个服务都会同时扮演两个角色:作为它所持有的一部分分区的leader,同时作为其他分区的followers,这样集群就会据有较好的负载均衡。

  • leader和follower的管理是通过zk集群来进行管理的。

Producer

  • Producer是指Kafka集群的消息生产者。Producer将消息发布(push)到它指定的topic中,并负责决定发布到哪个分区。

    • 通常简单的由负载均衡机制随机选择分区,但也可以通过特定的分区函数选择分区。一般而言,现在比较常用的是第二种方式。

Consumer

  • 抓取(pull)消息通常有两种模式:队列模式(queuing)和发布-订阅模式(publish-subscribe)。

  • 队列模式中,consumers可以同时从服务端读取消息,每个消息只被其中一个consumer读到;

  • 发布-订阅模式中消息被广播到所有的consumer中。

  • Consumers可以加入一个consumer 组,每个组都有且只有1台服务器能抓取到消息。

  • 如果所有的consumer都不在不同的组中,这就成为了发布-订阅模式,所有的消息都被分发到所有的consumer中。

  • 如果所有的Consumer在同一个组中,就是队列模式。

与Flume的区别

 

posted @ 2020-04-21 23:56  renzhongpei  阅读(258)  评论(0编辑  收藏  举报