kafka笔记

来源:互联网 发布:anaconda 改成python 2 编辑:程序博客网 时间:2024/04/27 13:47
用几张图说明kafka
先了解一下fakfa的几个关键属于
  • Broker
  Kafka集群包含一个或多个服务器,这种服务器被称为broker
  • Topic
  每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
  • Partition
  Parition是物理上的概念,每个Topic包含一个或多个Partition.
  • Producer
  负责发布消息到Kafka broker
  • Consumer
  消息消费者,向Kafka broker读取消息的客户端。
  • Consumer Group
  每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
一、看下kafka总的设计图
1image
一个典型的Kafka集群中包含若干Producer(可以是web前端产生的Page View,或者是服务器日志,系统CPU、Memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干Consumer Group,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。
二、Topic &Partition
Topic在逻辑上可以被认为是一个queue,每条消费都必须指定它的Topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得Kafka的吞吐率可以线性提高,物理上把Topic分成一个或多个Partition,每个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件.
屏幕快照 2016-08-14 14.16.51
如图说明:topic_0有两个partition,分别为:partition_0,partition_1。partition_0,1都存在2份,分别为:Replication_0,1.Replication_0,1分别存到了broker_0,1代理中。
这是一个简单的集群。假如现在broker_0为leader,Peplication_0为leader,Prlication_1为follow。
来了一条消息,消息进入broker_0,然后存入到了partition_0中的Replication_0中。接下来就是Repliction_1从0中拷贝一份数据做为备份。
把Replication_0,1分别存入到了broker_0,1,而broker_0,1是一台独立的服务器,这样当某台服务器挂掉的时候,或者磁盘坏掉的时候,另外一个一台立马会成为leader继续提供服务。
三、Partition数据的存储
每个日志文件都是一个log entrie序列,每个log entrie包含一个4字节整型数值(值为N+5),1个字节的”magic value”,4个字节的CRC校验码,其后跟N个字节的消息体。每条消息都有一个当前Partition下唯一的64字节的offset,它指明了这条消息的起始位置。磁盘上存储的消息格式如下:
  message length : 4 bytes (value: 1+4+n)
  “magic” value : 1 byte
  crc : 4 bytes
  payload : n bytes
  这个log entries并非由一个文件构成,而是分成多个segment,每个segment以该segment第一条消息的offset命名并以“.kafka”为后缀。另外会有一个索引文件,它标明了每个segment下包含的log entry的offset范围。
因为每条消息都被append到该Partition中,属于顺序写磁盘,因此效率非常高(经验证,顺序写磁盘效率比随机写内存还要高,这是Kafka高吞吐率的一个很重要的保证)。
3image
4image
对于数据存储来说,kafka可以永久存储,如果你的磁盘允许的话。
它也提供了2种方式来删除过去的数据。
1.时间,2.数据文件大小。
log.retention.hours=168
# The maximum size of a log segment file. When this size is reached a new log segment will be created.
log.segment.bytes=1073741824
# The interval at which log segments are checked to see if they can be deleted according to the retention policies
log.retention.check.interval.ms=300000
# If log.cleaner.enable=true is set the cleaner will be enabled and individual logs can then be marked for log compaction.
log.cleaner.enable=false
其实上面的是个人笔记。
下面提供学习地址:
kafka官网学习资料
http://kafka.apache.org/documentation.html#producerconfigs
1.讲的非常全面的一篇博客
http://www.jasongj.com/2015/03/10/KafkaColumn1/
2.kafka管理工具
http://blog.csdn.net/lsshlsw/article/details/47300145
3.kafka的文件存储
http://www.tuicool.com/articles/M7B3MjF
4.kafka的配置文件总要
http://www.cnblogs.com/liangyours/p/4971656.html


查看原文:http://www.baowenwei.com/archives/918
0 0
原创粉丝点击