分布式发布订阅消息系统Kafka---集群搭建

Overview

Kafka是distributed streaming platform

streaming platform有三个关键功能:

    • 发布和订阅记录流,类似于消息队列或企业消息传递系统。
    • 具有容错能力,能持久存储记录流。
    • 处理发生的记录流。

Kafka通常用于两大类应用:

    • 构建可在系统或应用程序之间可靠获取数据的实时流数据管道
    • 构建转换或响应数据流的实时流应用程序

Kafka有四个核心API:

    • Producer API允许应用程序发布的记录流至一个或多个卡夫卡的话题。
    • Consumer API 允许应用程序订阅一个或多个主题,并处理所产生的对他们记录的数据流。
    • Streams API 允许应用程序充当流处理器,从一个或多个主题消耗的输入流,并产生一个输出流至一个或多个输出的主题,有效地变换所述输入流,以输出流。
    • Connector API 允许构建和运行卡夫卡主题连接到现有的应用程序或数据系统中重用生产者或消费者。例如,关系数据库的连接器可能捕获对表的每个更改。

如何理解上面的概念,举个例子:

KafKa和消息系统类似,消息中间件:生产者和消费者

妈妈:生产者

你:消费者

馒头:数据流

正常情况下:生产一个,消费一个

其他情况:一直生产,你吃到某个馒头时,你卡住(机器故障),馒头就丢失

一直生产,做馒头速度快,你吃来不及,馒头也就丢失了

解决办法:拿个碗/篮子,馒头做好以后先放到篮子里,你要吃的时候去篮子里面取

碗/篮子:Kafka

当篮子满了,馒头就装不下了,咋办?

多准备几个篮子===Kafka 扩容

img

Kafka架构:

imgimg

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

img

第四步:发送消息

命令`> 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,

img

我们把–bootstrap-server改成–zookeeper,试试:

#bin/kafka-console-consumer.sh --zookeeper localhost:9092 --topic test --from-beginning

依然没有收到信息:

img

我们再想想是哪里出了问题,zookeeper的端口不是9092,而是2181,我们再试试:

#bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

终于收到了生产者的消息:

生产者:

img

消费者:

img

参数解释:–from-beginning,加上这个参数会消费者会接收到从生产者创建后产生的所有信息,不加这个参数者只接收消费者创建后生产者产生的消息。

查看所有topic的详细信息:bin``/kafka-topics``.sh --describe --zookeeper hadoop000:2181

img

查看指定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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值