《Kafka 0.9.0 Documentation》----Getting Started

来源:互联网 发布:java容器有哪些 编辑:程序博客网 时间:2024/06/05 04:30
一、基本概念
1.1、定义
Kafka是一个消息中间件框架。
1.2、结构
Kafka的整体结构如图1所示:

                                     图1


producer:生产者,生产消息。
consumer:消费者,消费消息。
kafka cluster:核心,提供服务将生产者生产的消息可靠高效地转发给消费者进行消费。一个"kafka cluster"由1到多个节点组成,每个节点被称为"broker"。
"producer和consumer"与"kafka cluster"之间的通信采用特定的协议。
1.3、数据流
1.3.1、主题和分区
Kafka以"主题(Topic)"为单位组织消息,Kafka在存储"主题"内所有消息时,又会进行分区,每个分区只能存放在一个"broker"上,而一个"broker"上可以存放多个分区。
为了容错,每个分区都可以有很多备份分区保存在"broker"上。存储分区的"broker"被称为"leader",存储相应的备份分区的"broker"被称为"follower",当该分区的"leader"失效时,会从所有相应的"follower"中选出一个成为新的"leader"。
1.3.2、生产者与主题
一个生产者进程可以绑定多个主题,多个生产者进程也可以绑定同一个主题,即生产者进程与主题的关系是“多对多”。
生产者进程会将生产的消息发送给所有绑定的主题。某个单个消息具体是发送给主题的哪个分区,可以有多种策略,比如轮转策略,根据消息的key值等。
分区内根据接收顺序存放消息,消费时,也根据相同的顺序进行消费。
1.3.3、消费者与主题
消费者进程组可以绑定多个主题,多个消费者进程组也可以绑定同一个主题,即消费者进程组与主题的关系是“多对多”。
一个主题内的分区跟绑定的消费者进程组内的某个消费者进程绑定,绑定的关系可以是"1:1"或者"N:1",而不可以是"1:M"或者"N:M",这样子才能保证消息被消费的顺序跟生产的顺序(其实是分区内接收消息的顺序)一致。
消费者进程消费分区内消息:一般是顺序读,允许是随机读。

一个可能的数据流拓扑图如图2所示:

                                                                                                            图2


1.4、其他

1、Kafka能够将主题内消息(具体是分区内消息)保存一段时间,该段时间被称为有效期,在有效期内,该消息可被消费。

2、与某个分区绑定的消费者进程可以对该分区内消息进行任意次消费,每次消费都可以对任意位置的消息进行消费。

3、分区的好处:如果不分区,一个"broker"可能存放不下一个主题内的所有消息;分区能够作为基本的并发单元,即分区内消息的消费顺序与生产顺序一致性(其实是分区内接收消息的顺序)能够以较小代价得到保证。
4、分区内消息的消费顺序与生产顺序(其实是分区内接收消息的顺序)被保证一致,而不同分区内消息的消费顺序与生产顺序不能被保证一致。即保证局部一致,而不是整体一致。要想获得整体一致,使得一个主题只包含一个分区(相应的,该唯一分区就只与一个消费者进程绑定了)就行。
5、同一台机器允许有多个消费者和生产者进程。
6、一个主题内分区接收某个生产者进程生产的消息的顺序跟生产顺序一致。需要注意的是,允许同时有多个生产者进程生产消息向同一个分区传递,因为多个生产者进程可以绑定同一个主题,进而最后会向同一个分区写入消息。


二、应用案例

可以被用来作为“消息中间件”(横向比较对象有:ActiveMQ,RabbitMQ等),“网站活动记录收集构件”,“度量统计数据收集构件”,“日志收集构件”(横向比较对象有:Scribe,Flume等)等。


三、安装运行
1、开启Kafka服务
Kafka服务依赖于Zookeeper服务,因此需要运行的命令如下:
bin/zookeeper-server-start.sh config/zookeeper.propertiesbin/kafka-server-start.sh config/server.properties
zookeeper默认开启的服务端口为2181,kafka默认开启的服务端口为9092
2、通过管理命令创建一个“主题”
具体执行命令如下:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
表示建立一个名为“test”的主题,主题只含有1个分区。分区的份数为1,即没有备份分区。
3、开启生产者进程
具体执行命令如下:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 
输入消息内容,按"Enter"发送。
4、开启消费者进程
具体执行命令如下:

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning


参考文献:

[1]http://kafka.apache.org/documentation.html#gettingStarted

0 0
原创粉丝点击