kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。
kafka名词解释
- producer:生产者。
- consumer:消费者。
- topic: 消息以topic为类别记录,Kafka将消息种子(Feed)分门别类,每一类的消息称之为一个主题(Topic)。
- broker:以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker;消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。每个消息(也叫作record记录,也被称为消息)是由一个key,一个value和时间戳构成。
kafka基基原理
消息模型分为两种:队列和发布-订阅式。队列的处理方式是一组消费者从服务器读取消息,一条消息只有其中的一个消费者来处理。在发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。Kafka为这两种模型提供了单一的消费者抽象模型: 消费者组(consumer group)。消费者用一个消费者组名标记自己。
一个发布在Topic上消息被分发给此消费者组中的一个消费者。假如所有的消费者都在一个组中,那么这就变成了queue模型。假如所有的消费者都在不同的组中,那么就完全变成了发布-订阅模型。更通用的, 我们可以创建一些消费者组作为逻辑上的订阅者。每个组包含数目不等的消费者,一个组内多个消费者可以用来扩展性能和容错。
并且,kafka能够保证生产者发送到一个特定的Topic的分区上,消息将会按照它们发送的顺序依次加入,也就是说,如果一个消息M1和M2使用相同的producer发送,M1先发送,那么M1将比M2的offset低,并且优先的出现在日志中。消费者收到的消息也是此顺序。如果一个Topic配置了复制因子(replication facto)为N,那么可以允许N-1服务器宕机而不丢失任何已经提交(committed)的消息。此特性说明kafka有比传统的消息系统更强的顺序保证。但是,相同的消费者组中不能有比分区更多的消费者,否则多出的消费者一直处于空等待,不会收到消息。
kafka应用场景
构建实时的流数据管道,可靠地获取系统和应用程序之间的数据。
构建实时流的应用程序,对数据流进行转换或反应。
kafka 安装
- 上传kafka_2.10-0.8.2.2.tgz安装包到服务器
- 解压安装文件
# tar –zxvf kafka_2.10-0.8.2.2.tgz
3.移动安装文件
# mv kafka_2.10-0.8.2.2 kafka
4.修改配置文件
修改config目录下producer.properties和server.properties配置文件
# vi producer.properties
添加如下内容:
metadata.broker.list=192.168.2.51:9092,192.168.2.52:9092,192.168.2.53:9092 producer.type=sync compression.codec=none serializer.class=kafka.serializer.DefaultEncoder |
# vi server.properties
添加如下内容:
broker.id=1
port=9092
host.name=192.168.2.52
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=10485
socket.receive.buffer.bytes=104857
socket.request.max.bytes=10485760
log.dirs=/home/storm/kafka/kafka-logs
num.partitions=5
num.recovery.threads.per.data.dir=1
log.retention.hours=24 #日志保存24小时
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.cleaner.enable=false
zookeeper.connect=192.168.2.52:2181,192.168.2.53:2181,192.168.2.54:2181
zookeeper.connection.timeout.ms=60000
|
5.远程复制分发安装文件
将经过以上步骤配置好的安装配置文件复制到其他kafka集群服务器,如:
scp kafka storm@rg-storm2:/home/storm
6.启动kafka集群
每台kafka集群服务器进行如下操作启动kafka服务:
如:
#nohup /home/storm/kafka/bin/kafka-server-start.sh /home/storm/kafka/config/server.properties > /dev/null 2>&1 &
用jps命令验证kafka是否启动,如:
出现上图红框进程说明kafka服务启动成功。
注:启动storm集群的前提条件是zookeeper集群已经启动。
7.创建topic
在部署kafka集群的任意一台服务器上执行以下命令:
./kafka-topics.sh --create --topic test2 --replication-factor 3 --partitions 3 --zookeeper