Kafka学习笔记整理

Apache Kafka是分布式发布-订阅消息系统…….

Kafka的基本介绍

Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。具有快速、可扩展、分布式、可复制等特点。Kafka与传统消息系统相比,有以下不同:

  • 它被设计为一个分布式系统,易于向外扩展
  • 它同时为发布和订阅提供高吞吐量
  • 它支持多订阅者,当失败时能自动平衡消费者
  • 它将消息持久化到磁盘,因此可用于批量消费

相关概念

1. topic

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

2. partition

parition是物理上的概念,每个topic包含一个或多个partition,创建topic时可指定parition数量。每个partition对应于一个文件夹,该文件夹下存储该partition的数据和索引文件

3. broker

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

4. 生产者

负责发布消息到Kafka broker

5. 消费者

消费消息。每个consumer属于一个特定的consumer group(可为每个consumer指定group name,若不指定group name则属于默认的group)。使用consumer high level API时,同一topic的一条消息只能被同一个consumer group内的一个consumer消费,但多个consumer 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的配置参数

可在$KAFKA_HOME/config/server.properties文件中指定如下参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#当前broker的ID
broker.id=0
#broker服务监控的端口
port=9092
#当前broker的主机名,可以是IP地址
host.name=172.16.3.233
#创建topic时,默认的分区数量
num.partitions=1
#基于时间删除消息,与基于分区容量删除消息,为两种删除策略,哪种先达到,哪种就触发
log.retention.hours=168
#基于分区容量删除消息
log.retention.bytes=1073741824
#partition级别的复制数量
default.replication.factor = 1
#zookeeper的连接IP及端口
zookeeper.connect=localhost:2181

Kafka的常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#启动zookeeper服务器
bin/zookeeper-server-start.sh config/zookeeper.properties
#启动kafka server
bin/kafka-server-start.sh config/server.properties
#创建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
#list topic
bin/kafka-topics.sh --list --zookeeper localhost:2181
#向broker发送数据
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
#从broker拉取数据
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning