官网:http://kafka.apache.org/
部署环境:阿里云三台机器
只做消息中间件,仅仅只做消息的存储,起到上游和下游的一个缓冲的作用,与分布式流式平台挂钩(Kafka、Storm)
kafka在以前的版本中就叫做消息中间件,现在官网的定位是分布式流式平台(A distributed streaming platform),虽然kafka给自己的定位是这样的,但是生产上90%的场景是消息中间件。
1、我们知道在Flume中有一个进程:一个进程包含三个角色
2、在Kafka中可以理解为有三个进程 --> 三个角色,kafka部署的进程叫broker。
3、对应生产架构,95%的场景都是这样:Flume --> Kafka --> Spark Streaming/Flink
企业为什么还是选择Spark的多,因为它囊括了Spark Core、Spark SQL、Spark Streaming、Spark机器学习、Spark结构化流;无论做离线或者实时,只要通过一种组件就囊括数据开发和挖掘。离线处理:Spark-core、Spark SQL
Kafka部署的进程叫 broker:
1、消息中间件:Read and Write streams of data like a messaging system
2、处理:Write scalable stream processing applications that react to events in real-time
3、存储:Store streams of data safely in a distributed,replicated,fault-tolerant cluster
生产上一般Kafka只用做消息中间件和存储,Kafka的存储是分布式、提供副本、高容错的。
版本选择:0.10.0.X
1、70%的公司都是选择CDH版本的。J总生产版本CDH-5.12.0,而我们自己学习的版本为CDH-5.7.0,我们要学会举一反三。
eg.企业生产版本和我们学习版本不一致,如何去做?
进入到如下网址:https://www.cloudera.com/documentation/kafka/latest.html,点击SELECT A DIFFERENT VERSION,CDK指的是kafka在CDH中的简写。
eg.生产使用cdh2.12.0,看官网,Minumum Supported CDH Version(最小支持的CDH版本),自行选择相近的版本。
Kafka版本的还有一个维度选择是Spark Streaming,官网推荐的是0.10+。
http://spark.apache.org/docs/latest/streaming-kafka-integration.html
2.2.0 Apache Kafka 0.10.2.0+kafka2.2.0+110 July 13, 2017 //以这一条为例,其实是由三部分构成
base_version+cloudera_version+patch_level
kafka_2.11-0.10.2-kafka-2.2.0.jar
Kafka2.11:scala版本
2.2.0是cloudera公司给的版本号,110是cloudera公司打的补丁号
要注意:kafka-clients-0.10.2-kafka-2.2.0.jar的版本,否则会引起生产上API的抛错。
回顾CDH部署过程中,hdfs yarn zk hive hbase spark(1.6.x),额外单独部署,自定义parcel:kafka、spark2;
更换网址后找到的也只是它的源代码包而已:http://archive.cloudera.com/kafka/kafka/2/
进入到kafka.apache.org上,找到对应的0.10版本,https://www.apache.org/dyn/closer.cgi?path=/kafka/0.10.0.0/kafka_2.11-0.10.0.0.tgz
1、Apache版本
-rw-rw-r-- 1 1000 1000 31M May 24 2016 kafka_2.11-0.10.0.0.tgz
2、CDH版本
注意:CDH上的kafka、spark2是根据包裹文件:KAFKA-2.2.0-1.2.2.0.p0.68-e17.parcel自定义去部署完成的。
kafka、spark是scala编程的
oms订单系统 mysql --> flume --> kafka(omstopic) --> ss1
wms订单系统 mysql --> flume --> kafka(wmstopic) --> ss2
mkdir omstopic文件夹 oms系统的数据就放到omstopic文件夹
mkdir wmstopic文件夹 wms系统的数据就放到wmstopic文件夹
kafka创建主题:一般根据生产业务处理数据来划分,omskafka和wmskafka两个topic其实是一个topic;一般是根据生产业务 上游+数据处理来划分。
最终落在磁盘上就是创建文件夹(linux文件夹)
omstopic 3个分区
p0 omstopic_0
p1 omstopic_1
p2 omstopic_2
omstopic_0 omstopic_0 omstopic_0
omstopic_1 omstopic_1 omstopic_1
omstopic_2 omstopic_2 omstopic_2
抛开Kafka不谈,mysql建完表后,会有一个自增长主键,就相当于是一个索引,offset的索引是从0开始的。
key | value |
---|---|
1 | aaa |
2 | bbb |
3 | ccc |
4 | ddd |
知道索引,知道下标后,精准消费
1、很多公司生产上60%的情况都是log日志,如果log日志是无序的状态,我们应该开心.
2、很多公司40%都是业务数据,比如mysql是一个有序状态,eg:我们在淘宝看中一双鞋,加入购物车,使用了insert操作;看了这双鞋不喜欢,把它删除购物车,做了update动作;我们添加一个口红,也是做了update动作;清空购物车,最后再做了一个delete操作;
很多公司为了保证全局有序:
在这种场景下,如何解决?
2、一些公司在sparkstreaming程序做一个排序,但是没必要,性能更加差了。
3、producer api(k,v)
[root@hadoop001 kafka]# ll
total 64656
-rw-r--r-- 1 root root 31579147 May 24 2016 kafka_2.11-0.10.0.0.tgz
-rw-r--r-- 1 root root 34622929 Feb 22 2018 zookeeper-3.4.5-cdh5.12.0.tar.gz
三台机器统一创建文件夹:
1、mkdir -p /opt/software
2、tar -xzvf /root/kafka/zookeeper-3.4.5-cdh5.12.0.tar.gz -C /opt/software/
3、进入到/opt/software目录后,cd conf目录,拷贝一份文件,cp zoo_sample.cfg zoo.cfg,编辑拷贝的这份zoo.cfg文件。
4、修改datadir目录:dataDir=/opt/software/zookeeper/data
5、再在zoo.cfg后面添加:
server.1=hadoop001:2888:3888
server.2=hadoop002:2888:3888
server.3=hadoop003:2888:3888
6、做一个软连接:
[root@hadoop001 software]# ln -s zookeeper-3.4.5-cdh5.12.0 zookeeper
[root@hadoop001 software]# pwd
/opt/software
7、zookeeper下创建data目录:
8、另外两台机器Hadoop002、hadoop003都像上面这样做就行了。
9、启动zookeeper,进入到bin目录,./zkserver.sh start
10、查看状态,必然是两个follower,一个leader。
安装目录自己根据生产进行变通。
进入到这个目录,进行编辑:
[root@hadoop001 config]# pwd
/root/kafka/kafka_2.11-0.10.0.0/config
[root@hadoop001 config]# vi server.properties
1、hadoop001机器上如下修改:
#The id of the broker. This must be set to a unique integer for each broker.
broker.id=0
host.name=hadoop001
port=9092
2、hadoop002机器上如下修改:
broker.id=1
host.name=hadoop002
port=9092
3、hadoop003机器上如下修改:
broker.id=2
host.name=hadoop003
port=9092
注意:broker.id要注意
1、cat kafka-server-start.sh,注意到下面有这么一句话:
shell脚本面试题目:$0的意思。
1、在hadoop001机器上进行前台启动,当前session关掉后,进程就会挂掉;三台机器依次前台启动:
命令:[root@hadoop001 bin]# ./kafka-server-start.sh …/config/server.properties
1、[2019-10-11 09:41:34,904] INFO [Kafka Server 0], started (kafka.server.KafkaServer)
2、[2019-10-11 09:41:34,904] INFO [Kafka Server 1], started (kafka.server.KafkaServer)
3、[2019-10-11 09:41:34,904] INFO [Kafka Server 2], started (kafka.server.KafkaServer)
这个id就是在这个目录下:/root/kafka/kafka_2.11-0.10.0.0/config,编辑这份文件: server.properties
1、 三台机器的kafka都okay了,我们的zookeeper并没有指定:
2、标准的生产上是如何配置的:/root/kafka/kafka_2.11-0.10.0.0/config,3台机器每台机器上都编辑这份文件,添加最后一句: server.properties
# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=hadoop001:2181,hadoop002:2181,hadoop003:2181/kafka
/kafka kafka在zk的目录
3、进入到./zkserver.sh,启动后使用ls /,我们发现它是一个零散的东西。
[zk: localhost:2181(CONNECTED) 1] ls /
[controller_epoch, brokers, zookeeper, admin, isr_change_notification, consumers, config]
上述都是kafka原生自带的文件夹,假如我们配置了,这些都在kafka里面。
正好是因为每个kafka的节点有zookeeper的进程,因此我们能够进行启动。
进入到zookeeper中后,出现:[zk: localhost:2181(CONNECTED) 0] ls /
[controller_epoch, brokers, zookeeper, kafka, admin, isr_change_notification, consumers, config],出现kafka,那么就意味着部署好了。
1、首先要进入zookeeper目录,cd /opt/software/zookeeper/bin,然后使用命令:./zkCli.sh,进入zookeeper目录。
2、然后ls /查看,
[zk: localhost:2181(CONNECTED) 0] ls /
[controller_epoch, brokers, zookeeper, kafka, admin, isr_change_notification, consumers, config]
3、删除brokers文件夹:
4、ls /kafka中有几个文件
5、退出zookeeper,使用quit
官网quickstart:
./kafka-topics.sh \
--create \
--zookeeper hadoop001:2181,hadoop002:2181,hadoop003:2181/kafka \
--partitions 3 \
--replication-factor 3 \
--topic ruozedatag6