电子商务网站规划建设与管理,wordpress5.1.1后门利用工具,转转假网站怎么做,多层次网络营销合法吗Kafka简介
Kafka最初由Linkedin公司开发的分布式、分区的、多副本的、多订阅者的消息系统。它提供了类似于JMS的特性#xff0c;但是在设计实现上完全不同#xff0c;此外它并不是JMS规范的实现。kafka对消息保存是根据Topic进行归类#xff0c;发送消息者称为Producer但是在设计实现上完全不同此外它并不是JMS规范的实现。kafka对消息保存是根据Topic进行归类发送消息者称为Producer消息接受者称为Consumer此外kafka集群有多个kafka实例组成每个实例(server)称为broker。无论是kafka集群还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息kafka的0.8版本之后producer不在依赖zookeeper保存meta信息而是producer自己保存meta信息。本文不打算对Apache Kafka的原理和实现进行介绍而在编程的角度上介绍如何使用Apache Kafka。我们分别介绍如何编写Producer、Consumer以及Partitioner等。
Producer发送的消息是如何定位到具体的broker
生产者初始化Producer在初始化时会加载配置参数并开启网络线程准备发送消息。拦截器逻辑Producer可以设置拦截器来预处理消息例如修改或者丰富消息内容。序列化Producer将处理后的消息key/value进行序列化以便在网络上传输。分区策略Producer会根据分区策略选择一个合适的分区这个分区策略可以是轮询、随机或者根据key的哈希值等。选择BrokerProducer并不直接将消息发送到指定的Broker而是将消息发送到所选分区的leader副本所在的Broker。如果一个主题有多个分区这些分区会均匀分布在集群中的Broker上。每个分区都有一个leader副本Producer总是将消息发送到leader副本然后由leader副本负责同步到follower副本。发送模式Producer发送消息的模式主要有三种发后即忘不关心结果同步发送等待结果以及异步发送通过Future对象跟踪状态。缓冲和批量发送为了提高效率Producer会先将消息收集到一个批次中然后再一次性发送到Broker。可靠性配置Producer可以通过设置request.required.acks参数来控制消息的可靠性级别例如设置为all时需要所有in-sync replicas都确认接收后才认为消息发送成功。失败重试如果请求失败Producer会根据配置的retries参数来决定是否重试发送消息。
Kafka的Producer通过一系列步骤来确定消息的发送目标其中分区策略和leader副本的选择是关键步骤确保了消息能够正确地发送到相应的Broker。同时通过合理的配置和重试机制Producer能够保证消息的可靠性和系统的健壮性。
Kafka存储文件长什么样
在kafka集群中每个broker一个kafka实例称为一个broker中有多个topictopic数量可以自己设定。在每个topic中又有多个partition每个partition为一个分区。kafka的分区有自己的命名的规则它的命名规则为topic的名称有序序号这个序号从0开始依次增加。 在每个partition中有可以分为多个segment file。当生产者往partition中存储数据时内存中存不下了就会往segment file里面存储。kafka默认每个segment file的大小是500M在存储数据时会先生成一个segment file当这个segment file到500M之后再生成第二个segment file 以此类推。每个segment file对应两个文件分别是以.log结尾的数据文件和以.index结尾的索引文件。
具体来说Kafka中的每个分区Partition由一个或多个Segment组成。每个Segment实际上是磁盘上的一个目录这个目录下面会包含几个特定的文件
.log文件这是真正存储消息数据的地方。每个Segment有一个对应的.log文件它存储了属于这个Segment的所有消息。.index文件索引文件用于快速定位到.log文件中的具体消息。通过.index文件可以高效地查找消息所在的.log文件位置。.timeindex文件可选如果启用了时间戳索引还会有这个文件。它用于按时间戳高效检索消息。
此外Segment作为Kafka中数据组织的基本单位设计成固定大小这样做可以方便地进行数据的清理和压缩同时保证性能。当一个Segment文件写满后Kafka会自动创建一个新的Segment来继续存储数据。旧的Segment文件在满足一定条件如被消费且达到一定的保留期后会被删除释放磁盘空间。 每个segment file也有自己的命名规则每个名字有20个字符不够用0填充。每个名字从0开始命名下一个segment file文件的名字就是上一个segment file中最后一条消息的索引值。在.index文件中存储的是key-value格式的key代表在.log中按顺序开始第条消息value代表该消息的位置偏移。但是在.index中不是对每条消息都做记录它是每隔一些消息记录一次避免占用太多内存。即使消息不在index记录中在已有的记录中查找范围也大大缩小了。
Consumer如何消费数据
Kafka中的Consumer通过以下步骤来消费数据
创建消费者实例需要创建一个消费者实例并指定一些关键配置如消费者所属的群组、Topic名称以及与服务器通信的相关设置。订阅主题创建好的消费者实例需要订阅一个或多个主题以便开始接收消息。拉取数据与一些消息系统采用的推送模式不同Kafka的消费者采用的是“拉取”模式。这意味着消费者需要主动从Broker拉取数据而不是等待Broker将数据推送过来。这种模式使得消费者可以根据自身处理能力来控制数据的获取速度。长轮询机制在没有新消息可消费时消费者会使用长轮询机制等待新消息到达。消费者调用poll()方法时可以设置超时时间timeout这样如果没有新消息消费者会在等待一段时间后返回并在下次调用poll()时继续尝试获取新消息。提交偏移量消费者在消费过程中会跟踪每个分区的消费进度即偏移量offset。当消费者处理完消息后它会提交当前的偏移量到Broker以便在服务重启或故障恢复的情况下可以从准确的位置继续消费数据。故障恢复如果消费者发生宕机等故障由于Kafka会持久化消费者的偏移量信息消费者可以在恢复后继续从之前提交的偏移量处消费数据确保不丢失任何消息。消费者群组Kafka支持多个消费者组成一个群组共同消费一个主题。在一个群组内每个消费者会被分配不同的分区来消费从而实现负载均衡和横向伸缩。同一个分区不能被一个群组内的多个消费者同时消费。数据处理消费者在拉取到数据后可以根据自己的业务逻辑对数据进行处理比如进行实时流处理或者存储到数据库中进行离线分析。
综上所述Kafka的Consumer通过上述流程高效地从Broker拉取并处理数据这些特性使得Kafka能够在高吞吐量和可扩展性方面表现出色适合处理大规模数据流的场景。
Kafka中的过期数据处理机制 kafka作为一个消息中间件是需要定期处理数据的否则磁盘就爆了。
处理的机制
根据数据的时间长短进行清理例如数据在磁盘中超过多久会被清理默认是168个小时 根据文件大小的方式给进行清理例如数据大小超过多大时删除数据大小是按照每个partition的大小来界定的。
删除过期的日志的方式
Kafka通过日志清理机制来删除过期的日志主要依赖于两个配置参数来实现这一功能
日志保留时间通过设置log.retention.hours参数可以指定日志文件的保留时间。当日志文件的保存时间超过这个设定值时这些文件将被删除。日志清理策略Kafka支持两种日志清理策略分别是delete和compact。delete策略会根据数据的保存时间或日志的最大大小来进行删除。而compact策略则是根据消息中的key来进行删除操作通常用于特定类型的主题如__consumer_offsets。
此外在Kafka 0.9.0及更高版本中日志清理功能默认是开启的log.cleaner.enable默认为true。这意味着Kafka会自动运行清理线程来执行定时清理任务。
综上所述Kafka通过结合保留时间和清理策略的配置实现了对过期日志的有效管理。这些机制确保了系统资源的合理利用同时避免了因日志无限增长而导致的潜在问题