Kafka是一种分布式的,基于发布/订阅的消息系统。

主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。
  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。
  • 同时支持离线数据处理和实时数据处理。
  • Scale out,支持在线水平扩展。

Kafka架构

术语Terminology

Broker

Kafka集群包含一个或多个服务器,这种服务器被称为broker

Topic

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

Partition

Partition是物理上的概念,每个Topic包含一个或多个Partition.

Producer

负责发布消息到Kafka broker

Consumer

消息消费者,向Kafka broker读取消息的客户端。

Consumer Group

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

拓扑结构

拓扑结构

一个典型的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遵循了传统的方式,选择由Producer向broker push消息, 由Consumer从broker pull消息。 一些logging-centric system,比如Facebook的Scribe和Cloudera的Flume,采用push模式。

Consumer可自主控制消费消息的速率,同时Consumer可以自己控制消费方式, 可批量消费,也可逐条消费,同时还能选择不同的提交方式从而实现不同的传输语义

mac安装及使用

安装

brew install kafka

修改server.properties

执行命令:vi /usr/local/etc/kafka/server.properties 增加一行配置如下:

listeners=PLAINTEXT://localhost:9092

启动zookeeper

brew services start zookeeper

前台启动zookeeper

zkServer start 

以server.properties的配置,启动kafka

在kafka的bin目录下: 执行命令:./kafka-server-start /usr/local/etc/kafka/server.properties

新建session,查看kafka的topic

在kafka的bin目录下: 执行命令:./kafka-topics –list –zookeeper localhost:2181

启动kafka

brew services start kafka

前台启动kafka

zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties & kafka-server-start /usr/local/etc/kafka/server.properties

kafka生产数据

在kafka的bin目录下,执行命令:

./kafka-console-producer --topic [topic-name]  --broker-listlocalhost:9092(第2步修改的listeners)

kafka消费

在kafka的bin目录下,执行命令:

./kafka-console-consumer --bootstrap-serverlocalhost:9092 —topic [topic-name]