鉴于Kafka在如今大数据处理领域的重要地位,还是写一篇文章来简单介绍一下kafka吧。本文只谈基础概念,也算是个小界,大神请绕道。这篇文章主要涉及一下几个方面:
- 什么时Kafka
- 熟悉Kafka的基本概念
- 创建一个单节点的集群
Kafka是什么?
简单来说,Kafka是一个高性能,可扩展和稳定的消息系统。这是一个开源的流数据处理平台。Apache Kafka最初由LinkedIn开发和维护,后来在2011年成为Apache基金会的开源项目,2012年成为Apache基金会的顶级开源项目。Kafka用Scala和Java语言开发。目的是提供一种高吞吐,低延迟的实时数据处理平台。
熟悉Kafka的基本概念
Apache基金会对Kafka的描述如下:
- 发布和订阅流数据记录
- 以容错的方式存储流数据记录
- 实时处理流数据记录
为什么要使用Kafka?
在大数据时代,系统需要处理和分析海量的数据。但是如何去手机和分析这些数据呢?这很多情况下,我们需要有一个强大的消息系统来接收和分发海量的实时数据。这样的消息系统必须能够实时处理数据,可以部署在分布式系统上,其处理能力和性能不会明显受到横向扩展的影响。Kafka正是顺应这样的要求而诞生的:
- 建立系统和应用之间的实时数据流管道
- 创建实时流应用,可以对数据的变化实时响应
什么是消息系统?
消息系统指的是在应用程序或者子程序之间传递数据的系统,从而使应用程序只需要关注数据处理本身而不需要关心数据是如何共享的。在一个发布和订阅模式的系统中,消息的持久化是以Topic为基本单元的,消息的发布者也称为消息生产者,消息的订阅者也可以称为消息消费者。消费者可以同时订阅一个或者多个topic中的消息。
Kafka的优点
- Reliability: Kafka是分布式,可分区,可复制,有容错能力的。支持多个订阅者,同时当有故障发生时,能够自动平衡消费者的订阅请求。
- Scalability: Kafka是基于分布式架构设计的,有非常好的可扩展性和可用性。
- Durability:Kafka使用了分布式的提交日志,能够迅速持久化信息在内部的复制集群上,保证了数据持久性
- Performance: Kfaka支持高吞吐的消息发布和订阅,及时在海量数据的压力下,依然能够保持比较稳定的性能。
Kafka基础概念:
- Kafka运行在集群上,可以是一台或者多台服务器
- Kafka集群把流数据记录分类存储,分类的名称叫Topic
- 每一条消息记录都事一个键值对,同时保留有时间戳
Topics 和 Logs
Kafka的消息记录分类叫做Topic,一个Topic通常是作为一种消息类型。每个Topic可以有0个或者多个消费者,每个Topic可以分成不同的Partition(分区),Kafka集群会维护一份分区日志(Partition log)如下图所示:
Partitions
每个Topic可以分成数个分区,以便能够存储和处理比较大的数据量,如上图所示这个Topic分成了3个Partition{0,1,2},Partition0有13个offsets...
Partition Offset
每个partition的消息都有一个唯一的ID,叫做Offset。Offset只能保证在每个Partition里是唯一的。
Replicas
Replicas是指的partition的备份。如果把上面的那个Topic的replication factor设置成5,那么Kafka就会在集群中给每个partition复制5份,Replicas通常不会直接使用,这个是分布式系统中为了保障可用性的一个机制,以防止某个节点故障时的数据丢失。
Brokers
Broker是实际负责发布消息的,Kafka的brockers是无状态的,所以需要Zookeeper来保持这些broker的状态。每个Broker会负责某Topic中0个或多个partition的消息数据发布。例如:一个Topic有10个partition,系统有10个broker,那每个broker会分配一个partition。如果10个partition,15个broker,那10个broker会分配1个partition,另外5个broker分配0个partition。如果有15个parition,10个broker,那么某些broker就会分配不知一个partition,这往往会造成负载不均衡,应该尽量避免这种情况的出现。
Zookeeper
ZooKeeper被用来管理和协同Kafka的brokers。用于通知生产者和消费者某个broker是否可用,是否故障。并协调broker工作。
Cluster
如果Kafka有不只一个broker,则称为Kafka集群-Kafka Cluster,Kafka集群可以用来管理消息的持久化,发布和复制。
Kafaka的4个核心API
Producer API,允许应用程序发布流数据记录到一个或多个Kafka Topic
Consumer API, 允许应用程序订阅一个或者多个topic的流数据消息,并处理这些消息
Streame API, 允许应用程序作为流处理器,从一个或者多个topic接收输入流数据,处理这些数据流后输出处理完的流数据到一个或多个Topic
Connector API, 允许创建和运行可重用的生产者和消费者,连接特定的Kafka topic到特定的应用和数据系统。比如,一个connector可以连接数据库,获取一张数据表的每次变更。
创建通用的单Broke“集群”
下面的内容是创建一个单broker,我们使用ubuntu16.04,Java 1.8以上版本。
1. 下载Kafka的压缩包Download,最新版本是2.4.0
>
tar
-xzf kafka_2.12-2.4.0.tgz
> cd
kafka_2.12-2.4.0
2. 启动Kafka 服务
> bin/kafka-server-start.sh config/server.properties
如果kafka服务启动失败,通常原因是没有ZooKeeper实例管理broker。在启动Kafka之前必须要先启动ZooKeeper。我们可以通过检查端口号来判断ZooKeeper是否启动成功
netstat -ant | grep :2181
如果没有Zookeeper,则需要安装。
sudo apt -get install zookeeeperd
在默认的情况下,ZooKeeper是打包在Ubuntu的默认库中的。一旦安装好,这个进程会运行并占用2181端口
3. 创建你的第一个Topic(Producer)
bin/kafka-console-producer.sh –broker-list localhost:9092 –topic yourTopicName
一旦ZooKeeper和Kafka成功运行,就可以用上面的命令来创建Topic,同时这个console窗口也会自动成为一个生产者客户端,等待录入消息。
4.创建一个消费者(Consumer)
现在生产者客户端已经运行起来,下一步创建一个消费者来读取消息
bin/kafka-console-consumer.sh –zookeeper localhost:2181 –topic yourTopicName --from-beginning
运行完成后可以看到上面的信息。
5. 列出所有的Topics
在Kafka的设计中,没有对Topic数量设置上限,所以列出集群中所有的Topic非常必要,命令如下:
bin/kafka-topics.sh –list –zookeeper localhost:2181
运行完成可以看到如下的结果:
以上就是单个Broker所需的操作,后面会介绍多Broker的情况。
文章评论