1、简介
Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。
Kafka是一种分布式的,基于发布/订阅的消息系统 , 它的架构包括以下组件:
i. 消息的发布(publish)称作producer,消息的订阅(subscribe)称作consumer,中间的存储阵列称作broker。
ii. 多个broker协同合作,producer、consumer和broker三者之间通过zookeeper来协调请求和转发。
iii. producer产生和推送(push)数据到broker,consumer从broker拉取(pull)数据并进行处理。
iv. broker端不维护数据的消费状态,提升了性能。 已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker). 消费者可以订阅一个或多个话题,并从Broker拉数据,从而消费这些已发布的消息。
v. 直接使用磁盘进行存储,线性读写,速度快:避免了数据在JVM内存和系统内存之间的复制,减少耗性能的创建对象和垃圾回收。
vi. Kafka使用scala编写,可以运行在JVM上。
如上图所示,一个典型的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订阅并消费消息。
Topic在逻辑上可以被认为是一个queue,每条消费都必须指定它的Topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得Kafka的吞吐率可以线性提高,物理上把Topic分成一个或多个Partition,每个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件。若创建topic1和topic2两个topic,且分别有13个和19个分区,则整个集群上会相应会生成共32个文件夹
开始安装kafka集群:
1,创建用户
在所有主机上添加用户:
groupadd kafka
useradd kafka -g kafka
2,主机分配 分别为Hadoop1 ,Hadoop2,Hadoop3
3,绑定hosts
172.16.1.250 hadoop1
172.16.1.252 hadoop2
172.16.1.253 hadoop3
4,下载,解压
https://kafka.apache.org/
tar -xzf kafka_2.9.2-0.8.1.1.tgz
cd kafka_2.9.2-0.8.1.1
ln -s /usr/local/hadoop/kafka_2.10-0.8.1.1 /usr/local/hadoop/kafka
chown -R kafka:kafka /usr/local/hadoop
在Hadoop3机器先安装
5,修改配置文件
cd /usr/local/hadoop/kafka/config
vim /kafka/server.properties
broker.id=3 三台机的id不能一样
port=9092
num.network.threads=2
num.io.threads=8
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=2
log.retention.hours=168
log.segment.bytes=536870912
log.retention.check.interval.ms=60000
log.cleaner.enable=false
zookeeper.connect=hadoop1:2181,hadoop2:2181,hadoop3:2181/kafka (zookpeer集群)
zookeeper.connection.timeout.ms=1000000
启动
bin/kafka-server-start.sh /usr/local/hadoop/kafka/config/server.properties &
6,配置Java环境
#java
export JAVA_HOME=/soft/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:/$JAVA_HOME/bin:$HADOOP_HOME/bin
7,部署kafka集群
由于kafka集群需要依赖zookeeper,所以安装下zookeeper
见:
https://taoistwar.gitbooks.io/spark-operationand-maintenance-management/content/spark_relate_software/kafka_install.html
7,同步三台机器的配置文件,并修改相应的broker.id=1,broker.id=2,broker.id=3
cd /usr/local/hadoop/
在Hadoop3机器上先安装好一台了
scp -r kafka/ hadoop1:/usr/local/hadoop/
scp -r kafka/ hadoop2:/usr/local/hadoop/
在Hadoop1机器上,修改配置文件,并启动
vim conf/server.properties
broker.id=1 三台机的id不能一样
port=9092
num.network.threads=2
num.io.threads=8
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=2
log.retention.hours=168
log.segment.bytes=536870912
log.retention.check.interval.ms=60000
log.cleaner.enable=false
zookeeper.connect=hadoop1:2181,hadoop2:2181,hadoop3:2181/kafka (zookpeer集群)
zookeeper.connection.timeout.ms=1000000
启动
bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &
在Hadoop2机器上,修改配置文件,并启动
vim conf/server.properties
broker.id=2 三台机的id不能一样
port=9092
num.network.threads=2
num.io.threads=8
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=2
log.retention.hours=168
log.segment.bytes=536870912
log.retention.check.interval.ms=60000
log.cleaner.enable=false
zookeeper.connect=hadoop1:2181,hadoop2:2181,hadoop3:2181/kafka (zookpeer集群)
zookeeper.connection.timeout.ms=1000000
启动
bin/kafka-server-start.sh /usr/local/hadoop/kafka/config/server.properties &
8验证
使用Kafka自带的脚本,启动基于Console的producer和consumer。
9,错误总结:
ttp://wenda.chinahadoop.cn/question/4079?notification_id=290954&rf=false&item_id=10382#!answer_10382
http://blog.csdn.net/wenxuechaozhe/article/details/52664774
http://472053211.blog.51cto.com/3692116/1655844
10,实际操作见:
https://taoistwar.gitbooks.io/spark-operationand-maintenance-management/content/spark_relate_software/kafka_install.html
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。