Overview
Kafka是distributed streaming platform。
streaming platform有三个关键功能:
-
- 发布和订阅记录流,类似于消息队列或企业消息传递系统。
- 具有容错能力,能持久存储记录流。
- 处理发生的记录流。
Kafka通常用于两大类应用:
-
- 构建可在系统或应用程序之间可靠获取数据的实时流数据管道
- 构建转换或响应数据流的实时流应用程序
Kafka有四个核心API:
-
- Producer API允许应用程序发布的记录流至一个或多个卡夫卡的话题。
- Consumer API 允许应用程序订阅一个或多个主题,并处理所产生的对他们记录的数据流。
- Streams API 允许应用程序充当流处理器,从一个或多个主题消耗的输入流,并产生一个输出流至一个或多个输出的主题,有效地变换所述输入流,以输出流。
- Connector API 允许构建和运行卡夫卡主题连接到现有的应用程序或数据系统中重用生产者或消费者。例如,关系数据库的连接器可能捕获对表的每个更改。
如何理解上面的概念,举个例子:
KafKa和消息系统类似,消息中间件:生产者和消费者
妈妈:生产者
你:消费者
馒头:数据流
正常情况下:生产一个,消费一个
其他情况:一直生产,你吃到某个馒头时,你卡住(机器故障),馒头就丢失
一直生产,做馒头速度快,你吃来不及,馒头也就丢失了
解决办法:拿个碗/篮子,馒头做好以后先放到篮子里,你要吃的时候去篮子里面取
碗/篮子:Kafka
当篮子满了,馒头就装不下了,咋办?
多准备几个篮子===Kafka 扩容
Kafka架构:
producer:生产者,就是生产馒头的,
consumer:消费者,就是吃馒头的,
broker: 篮子
topic:主题,给馒头带一个标签,topicA是给你吃的,topicB是给你弟弟吃的
我们总结一下:
- Kafka作为一个集群运行在一个或多个可跨多个数据中心的服务器上。
- Kafka集群可以以存储不同类别记录流,即主题topic。
- 每条记录都包含一个键,一个值和一个时间戳。
Kafka集群搭建–单节点单broker的部署
第一步:1安装zookeeper,配置环境变量,并启动
export ZOOK_HOME=/home/zengyouxuan/zookeeper/zookeeper-3.4.5-cdh5.7.0
export PATH= Z O O K H O M E / b i n : ZOOK_HOME/bin: ZOOKHOME/bin:PATH
2.下载Kafka包,并解压,添加环境变量:
> ``tar` `-xzf kafka_2.11-0.9.0.0.tgz
> ``cd
kafka_2.11-0.9.0.0
export KAFKA_HOME=/home/kafka/kafka_2.11-0.9.0.0
export PATH=
K
A
F
K
A
H
O
M
E
/
b
i
n
:
KAFKA_HOME/bin:
KAFKAHOME/bin:PATH
修改配置文件:
/config/server.properties
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=0
############################# Socket Server Settings #############################
listeners=PLAINTEXT://:9092
# Hostname the broker will bind to. If not set, the server will bind to all interfaces
#host.name=localhost #hadoop000
# A comma seperated list of directories under which to store log files
log.dirs=/tmp/kafka-logs #/home/zengyouxuan/tmp/kafka_log
#zookeeper的地址:
zookeeper.connect=hadoop000:2181
第二步:启动Kafka:
> bin``/kafka-server-start``.sh config``/server``.properties
可以先用命令:./kafka-server-start.sh看看会有什么提示信息,如下
USAGE: ./kafka-server-start.sh [-daemon] server.properties [–override property=value]*
./kafka-server-start.sh $KAFKA_HOME/config/server``.properties
第三步:创建topic
bin``/kafka-topics``.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic ``test
#bin``/kafka-topics``.sh --create --zookeeper hadoop000:2181 --replication-factor 1 --partitions 1 --topic ``test
查看topic:
bin``/kafka-topics``.sh --list --zookeeper localhost:2181
#bin``/kafka-topics``.sh --list --zookeeper hadoop000:2181
第四步:发送消息
命令`> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test```
> This is a message
> This is another message
#bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
第五步:启动消费者
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
------WHAT!!!居然报错了,说没有zookeeper,
我们把–bootstrap-server改成–zookeeper,试试:
#bin/kafka-console-consumer.sh --zookeeper localhost:9092 --topic test --from-beginning
依然没有收到信息:
我们再想想是哪里出了问题,zookeeper的端口不是9092,而是2181,我们再试试:
#bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
终于收到了生产者的消息:
生产者:
消费者:
参数解释:–from-beginning,加上这个参数会消费者会接收到从生产者创建后产生的所有信息,不加这个参数者只接收消费者创建后生产者产生的消息。
查看所有topic的详细信息:bin``/kafka-topics``.sh --describe --zookeeper hadoop000:2181
查看指定topic的详细信息:bin``/kafka-topics``.sh --describe --zookeeper hadoop000:2181 --topic test
Kafka集群搭建–单节点多broker的部署
复制server.properties为server-1.properties,server-2.properties,server-3.properties
并修改broker.id=0,listeners=PLAINTEXT://:9092,log.dirs=/tmp/kafka-logs 这几个参数,如下:
config/server-1.properties:`` ``broker.id=1`` ``listeners=PLAINTEXT://:9093`` ``log.dirs=/tmp/kafka-logs-1` `config/server-2.properties:`` ``broker.id=2`` ``listeners=PLAINTEXT://:9094`` ``log.dirs=/tmp/kafka-logs-2``config/server-3.properties:`` ``broker.id=3`` ``listeners=PLAINTEXT://:9095`` ``log.dirs=/tmp/kafka-logs-3
该broker.id
属性是群集中每个节点的唯一且永久的名称。我们必须覆盖端口和日志目录,因为我们在同一台机器上运行这些,并且我们希望让所有代理都试图在同一端口上注册或覆盖彼此的数据。
我们已经启动了Zookeeper并启动了我们的单个节点,因此我们只需要启动两个新节点:
现在创建一个复制因子为3的新主题
bin``/kafka-topics``.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
发送消息:
bin/kafka-console-producer.sh --broker-list localhost:9093 localhost:9094 localhost:9095 –topic my-replicated-topic
消费信息:
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic my-replicated-topic
my-replicated-topic