Kafka 详解 + 集群部署

什么是kafka ?

apche kafka 是 一个分布式流数据处理平台,kafka设计的初衷就是处理日志的,可以看做一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性。

Kafka 详解 + 集群部署_第1张图片

为什么要使用kafka?

1) 分布式
2)恐怖的吞吐能力
3)速度快
4)同时支持实时和离线两种解决方案
5)默认提供了消息的持久化
6)Open Source

说明 : 3台廉价PC组成的kafka 集群每秒可以处理 : 200万条消息(写),每秒10K 。

日志的重要性

银行流水日志,学习笔记,行为分析,快速定位鼓掌等等。

安装和配置 :

//下载
[root@VM_12_177_centos ]# wget http://mirror.bit.edu.cn/apache/kafka/0.11.0.0/kafka_2.11-0.11.0.0.tgz

//解压缩
[root@VM_12_177_centos installfile]# tar -zxvf kafka_2.11-0.11.0.0.tgz  -C  ../kafka/kafkaServer/


//复制文件
[root@VM_12_177_centos config]# cp server.properties  server01.properties 
[root@VM_12_177_centos config]# cp server.properties  server02.properties 
[root@VM_12_177_centos config]# cp server.properties  server03.properties 

//修改配置文件
[root@VM_12_177_centos config]# vim server02.properties 
[root@VM_12_177_centos config]# vim server01.properties 
[root@VM_12_177_centos config]# vim server03.properties
broker.id=0  //保证不一致,类似zookeeper中的myid
log.dirs=/agui/kafka/data0    // 该路劲存储三台kafka持久化数据的文件夹,我建立了data0,1,2
port=9092             // 端口,三个kafka 分别是9092 , 9093,9094 。不一致即可。
host.name=127.0.0.1   // 主机名称或者ip

//启动kafka 
[root@VM_12_177_centos kafka_2.11-0.11.0.0]# cd bin
[root@VM_12_177_centos bin]# ll
-rwxr-xr-x 1 root root 1376 Jun 23 06:06 kafka-server-start.sh
-rwxr-xr-x 1 root root  945 Jun 23 06:06 kafka-console-consumer.sh
-rwxr-xr-x 1 root root  944 Jun 23 06:06 kafka-console-producer.sh
-rwxr-xr-x 1 root root  867 Jun 23 06:06 zookeeper-security-migration.sh
-rwxr-xr-x 1 root root 1393 Jun 23 06:06 zookeeper-server-start.sh
-rwxr-xr-x 1 root root  978 Jun 23 06:06 zookeeper-server-stop.sh
-rwxr-xr-x 1 root root  968 Jun 23 06:06 zookeeper-shell.sh
// 不建议用 自带的 zookeeper 。  

//启动kafka 集群 , 顺序: 先启动 zookeeper集群,要么会报错。
//kafka启动会占用命令窗口,所以我们需要后台启动。
 [root@VM_12_177_centos bin]# jps
25697 QuorumPeerMain
25618 QuorumPeerMain
25652 QuorumPeerMain
26276 Jps
[root@VM_12_177_centos bin]# nohup  ./kafka-server-start.sh ../config/server01.properties 2>&1 > /dev/null &
[1] 26423
[root@VM_12_177_centos bin]# nohup: ignoring input and redirecting stderr to stdout
jps
25697 QuorumPeerMain
25618 QuorumPeerMain
25652 QuorumPeerMain
26710 Jps
26423 Kafka

//端口查看进程
[root@VM_12_177_centos bin]# netstat -tunlp|grep 9092
tcp        0      0 127.0.0.1:9092          0.0.0.0:*               LISTEN      26423/java  

//顺次启动其他的kafka,重复上述命令,改变server-x.properties 。


kafka成员
topic , produce , consume

kafka-topics.sh

都与主题(topic)有关,命令方式对topic crud( 创建,读取,更新,删除)

/**创建topic**/
[root@VM_12_177_centos bin]# ./kafka-topics.sh  --create --zookeeper localhost:2181 --replication-factor 4 --partitions 4 --topic agui-topic01
Error while executing topic command : replication factor: 4 larger than available brokers: 2
[2017-09-27 13:07:46,176] ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: replication factor: 4 larger than available brokers: 2
 (kafka.admin.TopicCommand$)
 //上面错误原因是: --replication-factor 4 的个数应该 <= kafka 个数
[root@VM_12_177_centos bin]# ./kafka-topics.sh  --create --zookeeper localhost:2181 --replication-factor 2 --partitions 4 --topic agui-topic01
Created topic "agui-topic01".
[root@VM_12_177_centos bin]# 

//list  查看 agui-topic01
[root@VM_12_177_centos bin]# ./kafka-topics.sh  --list --zookeeper localhost:2181
agui-topic01

// 连接 zk 客户端查看 agui-topic01
[zk: localhost:2181(CONNECTED) 2] ls /brokers/topics
[agui-topic01]
[zk: localhost:2181(CONNECTED) 3] 

topic介绍 :
每条发布到kafka集群的消息都有一个类别,这个类别被称为topic 。

producer介绍:
负责发布消息到 kafka broker

consumer 介绍:
消息消费者,向kafka broker 读取消息的客户端。

broker 介绍 :
kafka 集群包含一个或多个服务器,这种服务器被称为broker 。

kafka集群消费演练

创建两个linux连接
Kafka 详解 + 集群部署_第2张图片

//1赵建 去执行 生产命令
[root@VM_12_177_centos bin]# ./kafka-console-producer.sh  --broker-list localhost:9093 --topic agui-topic01
>hello
>wo shia^H agui
>zhangsan
>lisi
>wo shi agui
>



//2赵建 去执行 消费命令
[root@VM_12_177_centos bin]# ./kafka-console-consumer.sh  --zookeeper localhost:2181 --topic agui-topic01
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
zhangsan
lisi
wo shi agui

//说明:我们在1赵建中 继续添加agui-topic01 分片 内容,2赵建消费命令会自动将 新添加的分片打印出来。

java 代码演示 producer :

jar : 这里写图片描述

Kafka 详解 + 集群部署_第3张图片

//说明
27行 key 就是我们上面命令创建的 agui-topic01 
26行 msg 就是我们在agui-topic01下创建的分片。
//效果跟命令一样。

最后:

kafka 知道是什么了,也知道怎么配置了,也演练了基本的命令和java代码的使用,那么kafka 在分布式系统中到底如何使用?

logstash –> kafka –> storm –>hbase 。 这样一个分布式结构才是处理完整的kafka的计算结构。

你可能感兴趣的:(分布式,kafka)