Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
producer:生产者,就是生产馒头(老妈)
consumer:消费者,吃馒头的(你)
broker(kafka):放馒头的篮子
topic:主题,给馒头带一个标签,topicA的馒头是给你吃的,topicB的馒头是给别人吃的
首先我们要先部署好我们的Zookeeper,具体请移步大数据入门之Hadoop生态系统(12) -- HBase环境搭建和简单使用。
然后,下载安装Kafka,https://archive.apache.org/dist/kafka/0.9.0.0/kafka_2.11-0.9.0.0.tgz。
解压之后,配置到环境变量中。然后我们进入config目录下,执行“vi server.properties”,修改如下。
broker.id=0
host.name=hadoop000
log.dirs=/home/Kiku/app/tmp/kafka-logs
zookeeper.connect=hadoop000:2181
broker.id:每个kafka的id都应该不一样。
host.name:kafka主机名
log.dirs:kafka日志信息,这里目录写成自己的即可
zookeeper.connect:zookeeper地址
执行
kafka-server-start.sh -daemon /home/Kiku/app/kafka_2.11-0.9.0.0/config/server.properties
查看一下进程。如下即可。
kafka-topics.sh --create --zookeeper hadoop000:2181 --replication-factor 1 --partitions 1 --topic hello_topic
这里是创建一个topic,副本系数是1,分区数也是1,名字是:hello_topic,而且还要指定zookeeper的地址。
创建完了,我们来查看一下,是否创建成功了。
kafka-topics.sh --list --zookeeper hadoop000:2181
接下来,我们来用控制台发送消息。(生产者生产消息),hadoop000:9092是kafka配置的监听端口信息。
kafka-console-producer.sh --broker-list hadoop000:9092 --topic hello_topic
然后再启动一个终端,采用控制台消费消息,hadoop000:2181是zookeeper的地址。
kafka-console-consumer.sh --zookeeper hadoop000:2181 --topic hello_topic
注意:kafka-console-consumer.sh --zookeeper hadoop000:2181 --topic hello_topic --from-beginning 表示每次从头开始消费,也会消费以前的数据。
此时,我们在生产者终端中,输入一些字符串,“hello”,“world”
发现在消费者终端中,我们是可以接受到的。
kafka-topics.sh --describe --zookeeper hadoop000:2181
kafka-topics.sh --describe --zookeeper hadoop000:2181 --topic xxxxxxx
将server.propertis复制为三份
server-1.properties
log.dirs=/home/Kiku/app/tmp/kafka-logs-1
listeners=PLAINTEXT://:9093
broker.id=1
。。。。。。。
-daemon 后台启动
kafka-server-start.sh -daemon $KAFKA_HOME/config/server-1.properties &
kafka-server-start.sh -daemon $KAFKA_HOME/config/server-2.properties &
kafka-server-start.sh -daemon $KAFKA_HOME/config/server-3.properties &
创建topic --replication-factor: 3 创建3个副本 --partitions 1:创建1个分区
kafka-topics.sh --create --zookeeper hadoop000:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
发送消息
kafka-console-producer.sh --broker-list hadoop000:9093,hadoop000:9094,hadoop000:9095 --topic my-replicated-topic
消费信息
kafka-console-consumer.sh --zookeeper hadoop000:2181 --topic my-replicated-topic
以刚刚多broker为例,有三个broker副本。
Replicas:3,1,2 Isr:3,1,2 // 副本id为3,1,2 ;存活的是3,1,2
如果杀掉id=2的Kafka进程 => Replicas:3,1,2 Isr:3,1 // 副本id为3,1,2 ;存活的是3,1
如果杀掉id=3的Kafka进程 => Replicas:1 Isr:1 // 副本id为3,1,2 ;存活的是1 // 这个时候leader转成1