Kafka 详解 + 集群部署

来源:互联网 发布:怎么把mac照片导入u盘 编辑:程序博客网 时间:2024/05/31 18:33

什么是kafka ?

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

这里写图片描述

为什么要使用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.propertiesbroker.id=0  //保证不一致,类似zookeeper中的myidlog.dirs=/agui/kafka/data0    // 该路劲存储三台kafka持久化数据的文件夹,我建立了data0,1,2port=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]# jps25697 QuorumPeerMain25618 QuorumPeerMain25652 QuorumPeerMain26276 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 stdoutjps25697 QuorumPeerMain25618 QuorumPeerMain25652 QuorumPeerMain26710 Jps26423 Kafka//端口查看进程[root@VM_12_177_centos bin]# netstat -tunlp|grep 9092tcp        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-topic01Error 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-topic01Created topic "agui-topic01".[root@VM_12_177_centos bin]# //list  查看 agui-topic01[root@VM_12_177_centos bin]# ./kafka-topics.sh  --list --zookeeper localhost:2181agui-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连接
这里写图片描述

//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-topic01Using 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].zhangsanlisiwo shi agui//说明:我们在1赵建中 继续添加agui-topic01 分片 内容,2赵建消费命令会自动将 新添加的分片打印出来。

java 代码演示 producer :

jar : 这里写图片描述

这里写图片描述

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

最后:

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

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

原创粉丝点击