Ubuntu16.04 环境kafka部署以及项目demo

简介:
Apache Kafka是分布式发布-订阅消息系统,在 kafka官网上对 kafka 的定义:一个分布式发布-订阅消息传递系统。 它最初由LinkedIn公司开发,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。

基本原理:
我们将消息的发布(publish)称作 producer,将消息的订阅(subscribe)表述为 consumer,将中间的存储阵列称作 broker(代理),这样就可以大致描绘出这样一个场面:

生产者将数据生产出来,交给 broker 进行存储,消费者需要消费数据了,就从broker中去拿出数据来,然后完成一系列对数据的处理操作。
乍一看这也太简单了,不是说了它是分布式吗,难道把 producer、 broker 和 consumer 放在三台不同的机器上就算是分布式了吗。看 kafka 官方给出的图:

多个 broker 协同合作,producer 和 consumer 部署在各个业务逻辑中被频繁的调用,三者通过 zookeeper管理协调请求和转发。这样一个高性能的分布式消息发布订阅系统就完成了。
图上有个细节需要注意,producer 到 broker 的过程是 push,也就是有数据就推送到 broker,而 consumer 到 broker 的过程是 pull,是通过 consumer 主动去拉数据的,而不是 broker 把数据主懂发送到 consumer 端的。

Kafka的特性:
(1)高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作;

(2)可扩展性:kafka集群支持热扩展;

(3)持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;

(4)容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败);

(5)高并发:支持数千个客户端同时读写;

(6)支持实时在线处理和离线处理:可以使用Storm这种实时流处理系统对消息进行实时进行处理,同时还可以使用Hadoop这种批处理系统进行离线处理;

Kafka的使用场景:
(1)日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如Hadoop、Hbase、Solr等;

(2)消息系统:解耦和生产者和消费者、缓存消息等;

(3)用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到Hadoop、数据仓库中做离线分析和挖掘;

(4)运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告;

(5)流式处理:比如Spark streaming和storm;

(6)事件源;

主要安装流程如下:
环境说明:
zookeeper:zookeeper-3.4.10
kafka:kafka_2.11-2.0.0
jdk:jdk8(kafka启动需要使用到jdk)
安装部署操作如下(以下所有操作均是在root用户下操作):
一.安装部署zookeeper单机模式
1.下载zookeeper-3.4.10并开始安装:
cd /usr/local
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
2.安装成功后解压:
tar -zxvf zookeeper-3.4.10.tar.gz
3.配置zookeeper启动文件:
mkdir /home/jzwx/zookeeper/data
cd zookeeper-3.4.10/conf/
cp zoo_sample.cfg zoo.cfg (修改配置文件名)
vim zoo.cfg
配置文件中相应属性值设置为如下:
initLimit=10
syncLimit=5
dataDir=/home/jzwx/zookeeper/data
clientPort=2181
4.配置zookeeper环境变量:
vim /etc/profile
添加内容如下:
export ZOOKEEPER_HOME=/home/jzwx/zookeeper
export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH
刷新环境变量并生效
source /etc/profile
5.启动zookeeper服务:
./usr/local/zookeeper-3.4.10/bin/zkServer.sh start

二.安装配置kafka单机模式
1.下载kafka_2.11-2.0.0并开始安装:
cd /usr/local
wget https://www.apache.org/dyn/closer.cgi?path=/kafka/0.11.0.0/kafka_2.11-0.11.0.0.tgz
2.安装成功后解压:
tar -zxvf kafka_2.11-0.11.0.0.tgz
3.进入kafka/config目录下并修改server.properties,zookeeper.properties,producer.properties,consumer.properties这四个配置文件
配置server.properties:
以下为修改内容,其他为默认即可:
#broker.id需改成正整数,单机为1就好
broker.id=1
#指定端口号
port=9092
#localhost这一项还有其他要修改,详细见下面说明
host.name=localhost
#指定kafka的日志目录
log.dirs=/usr/local/kafka_2.11-0.11.0.0/kafka-logs
#连接zookeeper配置项,这里指定的是单机,所以只需要配置localhost,若是实际生产环境,需要在这里添加其他ip地址和端口号
zookeeper.connect=localhost:2181
advertised.listeners=PLAINTEXT://192.168.1.152(该地址为外网映射地址):9092 (配置该属性解决远程无法访问问题)
host.name=0.0.0.0 (配置该属性解决远程无法访问问题)

配置zookeeper.properties:
以下为修改内容,其他为默认即可:
#数据目录
dataDir=/usr/local/kafka_2.11-0.11.0.0/zookeeper/data
#客户端端口
clientPort=2181
host.name=localhost

配置producer.properties:
以下为修改内容,其他为默认即可:
zookeeper.connect=localhost:2181

配置consumer.properties:
以下为修改内容,其他为默认即可:
zookeeper.connect=localhost:2181

三.kafka的使用:
1.进入/usr/local/kafka_2.11-2.0.0目录下:
cd /usr/local/kafka_2.11-2.0.0

2.启动zookeeper服务:
bin/zookeeper-server-start.sh config/zookeeper.properties

3.新开一个窗口启动kafka服务:
bin/kafka-server-start.sh config/server.properties

四.测试

创建topic:
[root@ZooKeeper-Kafka-01 kafka]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions  --topic test

显示topic:
[root@ZooKeeper-Kafka-01 kafka]# bin/kafka-topics.sh --describe --zookeeper ZooKeeper-Kafka-01:2181, ZooKeeper-Kafka-02:2181, ZooKeeper-Kafka-03:2181 --topic test

列出topic:
[root@ZooKeeper-Kafka-01 kafka]# bin/kafka-topics.sh --list --zookeeper localhost:2181 test

创建 producer(生产者): 测试生产消息
[root@ZooKeeper-Kafka-01 kafka]# bin/kafka-console-producer.sh --broker-list localhost:9092 -topic test
>hello world
>hello
>

创建 consumer(消费者): 测试消费
[root@ZooKeeper-Kafka-02 kafka]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 -topic test --from-beginning
hello world
hello

删除 topic 和关闭服务
[root@ZooKeeper-Kafka-01 kafka]# bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test

启动服务:
bin/kafka-server-start.sh config/server.properties &

停止服务:
bin/kafka-server-stop.sh

本人springboot整合kafka项目demo(发布与订阅简单集成)地址:https://github.com/jzwx/kafka-demo
参考资料:
http://www.mamicode.com/info-detail-2223100.html
https://blog.csdn.net/qq_16414483/article/details/79477983
http://www.cnblogs.com/vipzhou/p/7235625.html
http://www.10tiao.com/html/591/201708/2247484083/1.html

猜你喜欢

转载自blog.csdn.net/sinat_30026065/article/details/82148587