1、安装zookeeper
参考文档:http://www.cnblogs.com/hunttown/p/5452138.html
2、下载:https://www.apache.org/dyn/closer.cgi?path=/kafka/0.9.0.1/kafka_2.10-0.9.0.1.tgz
kafka_2.10-0.9.0.1.tgz #2.10指的中Scala版本,0.9.0.1批的是Kafka版本。
3、安装与配置
解压:tar xzf kafka_2.10-0.9.0.1.tgz
配置config/server.properties
[root@Hadoop-NN-01 config]# vim server.properties broker.id=1 #唯一,填数字 port=9092 #端口 host.name=Hadoop-NN-01 #唯一,填服务器IP socket.send.buffer.bytes=1048576 socket.receive.buffer.bytes=1048576 socket.request.max.bytes=104857600 log.dir=/home/hadoopuser/kafka-logs #设置日志的硬盘路径 num.partitions=1 #分区数 关于分区数:1天有1亿行可以分8个分区,如果每天几十万行就一个分区。 num.io.threads=8 #为机器的核数 zookeeper.connect=Zookeeper-01:2181,Zookeeper-02:2181,Zookeeper-03:2181 # zookeeper Servers列表,各节点以逗号分开。
4、配置环境变量(如果单节点多个Broker请不要配置)
[root@Hadoop-NN-01 ~]# vim /etc/profile export KAFKA_HOME=/home/hadoopuser/kafka_2.10-0.9.0.1 export PATH=$PATH:$KAFKA_HOME/bin [root@Hadoop-NN-01 ~]# source /etc/profile #使环境变量生效
5、启动kafka
[root@Hadoop-NN-01 kafka_2.10-0.9.0.1]$ bin/kafka-server-start.sh config/server.properties &
6、验证
jps查看一下kafka是否已经启动
7、创建topic:
[root@Hadoop-NN-01 kafka_2.10-0.9.0.1]$ bin/kafka-topics.sh --create --zookeeper Zookeeper-01:2181, Zookeeper-02:2181, Zookeeper-03:2181 --replication-factor 3 --partitions 1 --topic mykafka
8、查看Topic:
[root@Hadoop-NN-01 kafka_2.10-0.9.0.1]$ bin/kafka-topics.sh --list --zookeeper Zookeeper-01:2181, Zookeeper-02:2181, Zookeeper-03:2181 Topic:mykafka
查看详细信息:
[root@Hadoop-NN-01 kafka_2.10-0.9.0.1]$ bin/kafka-topics.sh --describe --zookeeper Zookeeper-01:2181, Zookeeper-02:2181, Zookeeper-03:2181 Topic: mykafka PartitionCount:1 ReplicationFactor:3 Configs: Topic: mykafka Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
9、发送消息:
[root@Hadoop-NN-01 kafka_2.10-0.9.0.1]$ bin/kafka-console-producer.sh --broker-list Hadoop-NN-01:9092 --topic mykafka
10、接收消息:
[root@Hadoop-NN-01 kafka_2.10-0.9.0.1]$ bin/kafka-console-consumer.sh --zookeeper Zookeeper-01:2181 --topic mykafka --from-beginning
注:如果要最新的数据,不带--from-beginning参数即可。
11、可能出现的错误
ERROR:Failed to load class "org.slf4j.impl.StaticLoggerBinder"
解决方法:
下载slf4j-1.7.6.zip wget http://www.slf4j.org/dist/slf4j-1.7.6.zip
把slf4j-nop-1.7.6.jar 包复制到kafka libs目录下面
12、关于Kafka:
在kafka的核心思路中,不需要在内存里缓存数据,因为操作系统的文件缓存已经足够完善和强大,只要不做随机写,顺序读写的性能是非常高效的。kafka的数据只会顺序append,数据的删除策略是累积到一定程度或者超过一定时间再删除。
Kafka另一个独特的地方是将消费者信息保存在客户端而不是MQ服务器,这样服务器就不用记录消息的投递过程,每个客户端都自己知道自己下一次应该从什么地方什么位置读取消息,消息的投递过程也是采用客户端主动pull的模型,这样大大减轻了服务器的负担。
Kafka还强调减少数据的序列化和拷贝开销,它会将一些消息组织成Message Set做批量存储和发送,并且客户端在pull数据的时候,尽量以zero-copy的方式传输,利用sendfile(对应java里的FileChannel.transferTo/transferFrom)这样的高级IO函数来减少拷贝开销。可见,kafka是一个精心设计,特定于某些应用的MQ系统,这种偏向特定领域的MQ系统我估计会越来越多,垂直化的产品策略值的考虑。
附:推荐几个实时监控数据
zookeeper -> zooinspector
kafka-> kafkaoffsetmonitor
storm-> storm ui