Kafka学习

linkin开发的,最初是设计用来解决公司内被的海量日志传输问题
是分布式数据流平台,可以运行在单台服务器上,也可以在多态服务器上部署形成集群,它提供了发布和订阅的功能,使用者可以发送数据到kafka中,也可以从kafka中读取数据,kafka具有高吞吐,低延迟,高容错等特点

生产者往kafka发送数据的流程(6部)
  • 1,生产者从kafka集群获取分区leader信息
  • 2,生产者将消息发送到leader
  • 3,leader将消息写入本地磁盘
  • 4,follower从leader拉取消息数据
  • 5,follower将消息写入本地磁盘后向leader发送ACK
  • 6,leader收到所有的follower的ACK之后向生产者发送ACK
ACK应答机制
  • producer向kafka写入消息的时候,可以设置参数来确定是否确认kafka接收到数据,这个参数可以设置的值为0,1,all
  • 0,代表producer往集群发送数据不需要等到集群的返回,不确保消息发送成功,安全性最低但是效率最高
  • 1,代表producer往集群发送数据只需要leader应答就可以发送吓一跳,只确保发送成功
  • all,代表producer往集群发送数据需要所有的follower都完成从leader的同步才会发送下一条,确保leader发送成功和所有的副本都完成备份,安全性最高,效率最低
kafka集群
  • 1,broker --集群里面的某台节点
  • 2,topic---消息队列的主题
  • 3,partition分区,把同一个topic分成不同的分区,做负载,提高kafka的吞吐量。同一个topci在不同的分区,数据是不重复的 leader 分区主节点follower 副本
  • 4,Consumer Group 消息消费者

 

选择分区的模式(3种)
  • 1,指定往固定的分区写
  • 2,指定key,kafka根据key值做hash,然后决定写哪个分区
  • 3,轮询的方式写消息

生产者往kafka发送数据的模式(3种)

  • 1,0把数据发送给leader,不管ack的返回。效率最高,安全最低
  • 2,1,把数据发送给leader,只需要leader回复ack
  • 3,all,把数据发给leader,follower从leader拉取数据后回复给leader,leader确认所有的follower回复了ack,在回复给producer。安全性最高,效率最低


topic和数据日志
topic是同一类

每个partition都是一个有序并且不可变的消息记录集合,当新的数据写入时候,就被追加到partition·的末尾。在每个partition中,每条消息都会被分配一个顺序的唯一标识。这个标识被称为offset,即偏移量,注意,kafka只保证在同一个partition内部消息是有序的,在不同的partiton之间,并不能保证消息有序。
kafka可以配置一个保留期,用来标识日志会在kafka集群内保留多长时间。kafka集群会保留在保留期限内所以被发布的消息,不管这些消息是否被消费国。比如保留期设置为两天。那么数据被发布到kafka集群的两天以内、所有的这些数据都可以被消费。当超过两天,这些数据将会被清空,一遍为后续的数据腾出空间。由于kafka会将数据进行持久化的存储,即写入磁盘。。所以保留的数据大小可以设置为一个比较大的值。

partition 的结构

partiton在服务器上的表示形式就是一个一个的文件夹,每个parition的文件夹下面会有多组segment文件,每组segment文件又包含.index文件.log文件,.timeindex文件这三个文件夹。其实.log文件就是实际存储message的地方。而.index和.timeindex文件为索引文件,用于检索消息


消费数据

多个消费者实例可以组成一个消费组。并用一个标签来表示这个消费组。一个消费者组中的不通消费者实例可以运行在不同的进程甚至不同的服务器上。
如果所有的消费者实例都在同一个消费者组中,那么消费记录会被很好的均衡的发送到每个消费者实例。
如果所有的消费者实例都在不同的消费组,那么每一条消息记录会被广播到每个消费者实例中


zookeeper

是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开园的实现,它是集群的管理者,监视着集群中各个节点的状态,根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效,功能稳定的系统提供给用户

logAgent的工作流程:

1,读日志 ---- tailf 第三方库 --- go get github.com/hpcloud/tail
2,往kafka写日志---sarama库---go get github.com/Shopify/sarama

 

#**********************kafka

先修改配置文件
config /zookeeper 修改日志目录
然后启动zookeeper
进入kafka的目录,然后命令
bin\windows\zookeeper-server-start.bat config\zookeeper.properties


然后启动kafka
配置文件,修改log.dir= 日志目录
bin\windows\kafka-server-start.bat config\server.properties


kafka自带的消费者读取数据
bin\windows\kafka-console-consumer.bat --bootstrap-server=127.0.0.1:9092 --topic=web_log --from-beginning

查看分区 情况
bin\windows\kafka-topics.bat --bootstrap-server=127.0.0.1:9092 --describe

  

posted @ 2021-01-22 11:25  pebblecome  阅读(73)  评论(0)    收藏  举报