ApacheKafka(简称Kafka)是由LinkedIn公司开发的分布式消息流平台,于年开源。Kafka是使用Scala和Java编写的,当下已成为最流行的分布式消息流平台之一。Kafka基于发布/订阅模式,具有高吞吐、可持久化、可水平扩展、支持流数据处理等特性。Kafka与Pulsar都是优秀的分布式消息流平台,它们都提供了以下基础功能:
(1)消息系统:Kafka与Pulsar都可以实现基于发布/订阅模式的消息系统,消息系统可以实现由消息驱动的程序—生产者负责产生并发送消息到消息系统,消息系统将消息投递给消费者,消费者收到消息后,执行自己的逻辑。
这种消息驱动机制具有以下优点:
系统解耦:生产者与消费者逻辑解耦,互不干预。如果需要对消息添加新的处理逻辑,则只需要添加新的消费者即可,非常方便。
流量削峰:消息系统作为消息缓冲区,以低成本将上游服务(生产者)的流量洪峰缓存起来,下游服务(消费者)按照自身处理能力从消息队列中读取数据并进行处理,避免下游服务由于大量的请求流量而崩溃。
数据冗余:消息系统将数据缓存起来,直到数据被处理,避免下游服务由于崩溃下线、网络阻塞等原因无法及时处理数据而导致数据丢失。
(2)存储系统:Kafka与Pulsar可以存储大量数据,并且客户端控制自己读取数据的位置,所以它们也可以作为存储系统,存储大量历史数据。
(3)实时流数据管道:Kafka与Pulsar可以构建实时流数据管道,流数据管道从MySQL、MongoDB等数据源加载数据到Kafka与Pulsar中,其他系统或应用就可以稳定地从Kafka与Pulsar中获取数据,而不需要再与MySQL等数据源对接。为此,Kafka提供了KafkaConnect模块,Pulsar提供了PulsarIO模块,它们都可以构建实时流数据管道。
(4)流计算应用:流计算应用不断地从Kafka与Pulsar中获取流数据,并对数据进行处理,最后将处理结果输出到Kafka与Pulsar中(或其他系统)。流计算应用通常需要根据业务需求对流数据进行复杂的数据变换,如流数据聚合或者join等。为此,Kafka提供了KafkaStreams模块,Pulsar提供了PulsarFunctions模块,它们都可以实现流计算应用。另外,Kafka与Pulsar也可以与流行的Spark、Flink等分布式计算引擎结合,构建实时流应用,实时处理大规模数据。
Kafka与Pulsar都具有(或追求)以下特性:
(1)高吞吐、低延迟:它们都具有高吞吐量处理大规模消息流的能力,并且能够低延迟处理消息。这也是大多数消息流平台追求的目标。
(2)持久化、一致性:Kafka与Pulsar都支持将消息持久化存储,并提供数据备份(副本)功能,保证数据安全及数据一致性,它们都是优秀的分布式存储系统。
(3)高可扩展性(伸缩性):Kafka与Pulsar都是分布式系统,会将数据分片存储在一组机器组成的集群中,并支持对集群进行扩容,从而支持大规模的数据。
(4)故障转移(容错):Kafka与Pulsar支持故障转移,即集群中某个节点因故障下线后,并不会影响集群的正常运行,这也是优秀的分布式系统的必备功能。
Kafka与Pulsar虽然提供的基础功能类似,但它们的设计、架构、实现并不相同。
部署ZooKeeper集群成功后(见文章),就可以部署Kafka集群了。这里笔者部署一个3节点的Kafka集群。
部署Kafka集群
1.准备环境
(1)同样准备3台机器,安装OpenJDK11,用于部署Kafka集群。
(2)下载kafka_2.13-3.0.0.tgz,解压并进入kafka_2.13-3.0.0。
2.修改配置
修改Kafka默认的配置文件config/server.properties:
broker.id=0zookeeper.connect=zk1:,zk2:,zk3:
zookeeper.connect:ZooKeeper连接地址。
broker.id:Kafka的服务Id,必须为整数,不同节点的Kafka需要配置不同的broker.id。这里笔者为3个Kafka节点配置了服务Id:0、1、2。
Kafka中还有很多配置,后面的章节中会对其进行介绍,这里只介绍必须修改的配置。
3.启动服务
(1)在3台机器上使用以下命令启动Kafka服务。
./bin/kafka-server-start.shconfig/server.properties
如果需要后台启动Kafka服务,则可以使用以下命令:
./bin/kafka-server-start.sh-daemonconfig/server.properties
Kafka日志会输出到logs/kafkaServer.out文件中。
(2)3个集群的Kafka服务都启动后,可以使用以下命令创建一个主题。
./bin/kafka-topics.sh--create--bootstrap-serverlocalhost:--replication-factor3--partitions3--topichello-topicCreatedtopichello-topic.
如果能成功创建主题,则说明Kafka集群部署成功。
内容摘自《深入理解Kafka与Pulsar》,本书详细介绍了Kafka与Pulsar的使用方式,并深入分析了它们的实现机制。通过阅读本书,读者可以快速入门和使用Kafka与Pulsar,并深入理解它们的实现原理。
适读人群:Kafka、Pulsar的专业技术人员。大数据相关应用的开发者、运维者和爱好者。