大数据实战之分布式发布订阅消息系统Kafka

kafka概述:
官方文档:kafka.apache.org
    和消息系统类似
    
    消息中间件:    生产者和消费者
    
在生产者和消费者之间的一个缓冲区,生产者将产生的消息发送到kafka中,当消费者需要消息的时候,就去kafka中获取消息
解决问题:    1):消费者宕机    2):生产者产生的消息过快,消费者来不及消费 从根本上解决消息丢失问题

kafka架构:
    producer:    生产者,产生消息的
    comsumer:    消费者,消费消息的
    broker:        存储消息的容器
    topic:        主题,给消息打一个标签
    
    
单节点单broker的部署和使用:
部署kafka:
    下载-->解压-->修改配置文件
    $KAFKA_HOME/config/server.properties
    broker.id
    listeners
    host.name
    log.dirs
    zookeeper.connect
    
首先必须先启动zookeeper:

 zkServer.sh start 

    启动kafka:
  

 kafka-server-start.sh -daemon config/server.properties

 -daemon 加了这个参数,说明是在后台启动
    
创建topic:    要指定zookeeper
    注意,创建topic的时候,一定要指定zookeeper的地址,还有分区数量和副本数量,主题的名字
  

 kafka-topics.sh --create --zookeeper hadoop000:2181 --replication-factor 1 --partitions 1 --topic hello_topic


    
删除topic:
  

 kafka-topics.sh --delete --zookeeper hadoop000:2181 --topic hello_topic2

查看所有的topic:

 kafka-topics.sh --list --zookeeper hadoop000:2181

发送消息(生产消息):    要指定broker
  

 kafka-console-producer.sh --broker-list hadoop000:9092 --topic hello_topic2


    
消费消息:    要指定zookeeper
    参数:    --from-beginning    可以保存并接收到历史数据
  

 kafka-console-consumer.sh --zookeeper hadoop000:2181 --topic hello_topic2 --from-beginning


    
查看所有topic的详细信息:
  

 kafka-topics.sh --describe --zookeeper hadoop000:2181


查看指定topic的详细信息:
  

 kafka-topics.sh --describe --zookeeper hadoop000:2181 --topic hello_topic2


    
    
单节点多broker的部署及使用:
将server.properties复制多份
    server-1.properties    broker.id=1    listeners=PLAINTEXT://:9093    log.dir=/tmp/kafka-logs-1
    server-2.properties    broker.id=2    listeners=PLAINTEXT://:9094    log.dir=/tmp/kafka-logs-2
    server-3.properties broker.id=3    listeners=PLAINTEXT://:9095    log.dir=/tmp/kafka-logs-3
依次修改:
    broker.id
    listeners
    log.dir

依次启动,在后台启动:
  

 kafka-server-start.sh -daemo $KAFKA_HOME/config/server-1.properties &
 kafka-server-start.sh -daemo $KAFKA_HOME/config/server-2.properties &
 kafka-server-start.sh -daemo $KAFKA_HOME/config/server-3.properties &

创建多副本的topic:
  

 kafka-topics.sh --create --zookeeper hadoop000:2181    --replication-factor 3 --partitions 1 --topic my-replication-hello_topic

    
整合flume和kafka完成实时数据的收集
编辑配置文件:    avro-memory-kafka.conf

avro-memory-kafka.sources = avro-source
avro-memory-kafka.sinks = kafka-sink
avro-memory-kafka.channels = memory-channel

avro-memory-kafka.sources.avro-source.type = avro
avro-memory-kafka.sources.avro-source.bind = hadoop000
avro-memory-kafka.sources.avro-source.port = 44444

avro-memory-kafka.sinks.kafka-sink.type = org.apache.flume.sink.kafka.KafkaSink
avro-memory-kafka.sinks.kafka-sink.brokerList = hadoop000:9092
avro-memory-kafka.sinks.kafka-sink.topic = hello_topic
avro-memory-kafka.sinks.kafka-sink.batchSize = 5
avro-memory-kafka.sinks.kafka-sink.requiredAcks =1

avro-memory-kafka.channels.memory-channel.type = memory

avro-memory-kafka.sources.avro-source.channels = memory-channel
avro-memory-kafka.sinks.kafka-sink.channel = memory-channel


1.启动zookeeper:    zkServer.sh start 
2.启动kafka:    kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

3.依次启动flume:
要先启动avro-memory-kafka.conf,进行监听:
avro-memory-kafka.conf相当于生产者,avro-memory-kafka.conf等待接收exec-memory-avro.conf发送过来的消息,并把接收的消息作为自己生产的消息,发送给消费者

flume-ng agent --name avro-memory-kafka --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/avro-memory-kafka.conf -Dflume.root.logger==INFO,console

再启动被监听的机器:
exec-memory-avro.conf接收更新的日志消息,发给avro-memory-kafka.conf

flume-ng agent --name exec-memory-avro --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/exec-memory-avro.conf -Dflume.root.logger==INFO,console

4.启动kafka的消费者:  

 kafka-console-consumer.sh --zookeeper hadoop000:2181 --topic hello_topic2

 

5.更新日志:
 

cd /home/hadoop/data
echo hello >> data.log

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值