Kafka学习笔记
异步通信原理
观察者模式
- 观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe)
- 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有的依赖于它的对象都会得到通知并自动更新
- 一个对象(目标对象)的状态发生改变,所有依赖的对象(观察者对象)都将得到通知,进行广播通知。






kafka简介
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。












Kafka环境搭建
-
下载、解压
-
修改配置文件(/config/server.properties)
#broker的全局唯一编号,不能重复 broker.id=0 #用来监听链接的端口,producer或consumer将在此端口建立连接 listeners=PLAINTEXT://192.168.1.30:9092 port=9092 #处理网络请求的线程数量,也就是接收消息的线程数。 #接收线程会将接收到的消息放到内存中,然后再从内存中写入磁盘。 num.network.threads=3 #消息从内存中写入磁盘是时候使用的线程数量。 #用来处理磁盘IO的线程数量 num.io.threads=8 #发送套接字的缓冲区大小 socket.send.buffer.bytes=102400 #接受套接字的缓冲区大小 socket.receive.buffer.bytes=102400 #请求套接字的缓冲区大小 socket.request.max.bytes=104857600 #kafka运行日志存放的路径 log.dirs=/usr/local/kafka/logs #topic在当前broker上的分片个数 num.partitions=2 #我们知道segment文件默认会被保留7天的时间,超时的话就 #会被清理,那么清理这件事情就需要有一些线程来做。这里就是 #用来设置恢复和清理data下数据的线程数量 num.recovery.threads.per.data.dir=1 #segment文件保留的最长时间,默认保留7天(168小时), #超时将被删除,也就是说7天之前的数据将被清理掉。 log.retention.hours=168 #滚动生成新的segment文件的最大时间 log.roll.hours=168 #日志文件中每个segment的大小,默认为1G log.segment.bytes=1073741824 #上面的参数设置了每一个segment文件的大小是1G,那么 #就需要有一个东西去定期检查segment文件有没有达到1G, #多长时间去检查一次,就需要设置一个周期性检查文件大小 #的时间(单位是毫秒)。 log.retention.check.interval.ms=300000 #日志清理是否打开 log.cleaner.enable=true #broker需要使用zookeeper保存meta数据 zookeeper.connect=zk01:2181,zk02:2181,zk03:2181 #zookeeper链接超时时间 zookeeper.connection.timeout.ms=6000 #自动创建topic,当kafka集群没有的的时候 auto.create.topics.enable=true #上面我们说过接收线程会将接收到的消息放到内存中,然后再从内存 #写到磁盘上,那么什么时候将消息从内存中写入磁盘,就有一个 #时间限制(时间阈值)和一个数量限制(数量阈值),这里设置的是 #数量阈值,下一个参数设置的则是时间阈值。 #partion buffer中,消息的条数达到阈值,将触发flush到磁盘。 log.flush.interval.messages=10000 #消息buffer的时间,达到阈值,将触发将消息从内存flush到磁盘, #单位是毫秒。 log.flush.interval.ms=3000 #删除topic需要server.properties中设置delete.topic.enable=true否则只是标记删除 delete.topic.enable=true #此处的host.name为本机IP(重要),如果不改,则客户端会抛出: #Producer connection to localhost:9092 unsuccessful 错误! host.name=kafka01 advertised.host.name=192.168.239.128 -
设置环境变量
export KAFKA_HOME=/root/kafka_2.13-2.7.0 export PATH=$PATH:$KAFKA_HOME/bin source /etc/profile -
启动
./kafka-server-start.sh /root/kafka_2.13-2.7.0/config/server.properties # 后台启动 ./kafka-server-start.sh -daemon /root/kafka_2.13-2.7.0/config/server.propertiesKafka常用命令
-
创建Topic
./kafka-topics.sh --zookeeper kafka01:2181,kafka02:2181,kafka03:2181 --create --partitions 3 --replication-factor 1 --topic userlog
* 查看Topic列表 ```shell ./kafka-topics.sh --zookeeper kafka01:2181 --list-
查看指定Topic详情
./kafka-topics.sh --zookeeper kafka01:2181 --describe --topic userlog
* 创建生产者Producer ```shell ./kafka-console-producer.sh --broker-list kafka01:9092,kafka02:9092,kafka03:9092 --topic userlog-
创建消费者Consumer
低版本:./kafka-console-consumer.sh --zookeeper 192.168.1.20:2181 --topic osmessages 新版本: ./kafka-console-consumer.sh --bootstrap-server kafka01:9092,kafka02:9092,kafka03:9092 --from-beginning --topic userlog
Kafka信息检索机制
-


Kafka数据安全机制
801

被折叠的 条评论
为什么被折叠?



