王者荣耀快速刷名师点
0
2025 / 07 / 22
1、Kafka将消息存储在磁盘中,为了控制磁盘占用空间的不断增加就需要对消息做一定的清理操作。Kafka提供了两种日志清理策略。kafka有专门的任务来周期性删除不符合条件的日志分段文件,删除策略主要以下有3种。对于有相同key的不同value值,只保留最后一个版本。
2、Kafka创建topic命令很简单,一条命令足矣:bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 3 --topic test 。此命令将创建一个名为test的topic,其中有三个分区,每个分区需要分配三个副本。三。topic创建主要分为两部分:命令行controller逻辑部分。
3、Kafka作为一个支持大数据量写入写出的消息队列,由于是基于Scala和Java实现的,而Scala和Java均需要在JVM上运行,所以如果是基于内存的方式,即JVM的堆来进行数据存储则需要开辟很大的堆来支持数据读写,从而会导致GC频繁影响性能。考虑到这些因素,kafka是使用磁盘存储数据的。
4、关系:Kafka和数据库之间的关系可以是数据的传输和处理。在某些情况下,Kafka可以用作数据库和应用程序之间的中间件,起到缓冲和传输数据的作用。例如,当应用程序需要处理大量的实时数据流时,可以将数据先发送到Kafka中进行缓存和处理,然后再将处理后的数据存储到数据库中。
5、Kafka 框架的数据吞吐量高的原因有以下几点: 分布式架构:Kafka采用分布式架构,可以将数据分散到多个节点上进行处理和存储,从而提高系统的吞吐量。 零拷贝:Kafka使用零拷贝技术,可以避免数据在内存和网络之间的多次拷贝,从而减少CPU的开销,提高系统的吞吐量。
1、kafka使用 producer ,broker 和 consumer 都共享的标准化的二进制消息格式,这样数据块不用修改就能在他们之间传递。kafka采用Linux 中系统调用sendfile的方式,直接将数据从 pagecache 转移到 socket 网络连接中。这种零拷贝方式使得kafka数据传输更加高效。
2、Kafka通过以下几种方式来保证消息不丢失: 分布式架构:Kafka是一个分布式系统,这意味着它能够处理大量数据,并且可以分布在多个节点上,提高了系统的可扩展性和可靠性。 复制和备份:Kafka使用副本机制来确保消息不会丢失。每个分区都有一个备份副本,可以在主分区出现故障时使用。
3、使用kafka-run-class工具调用kafka.tools.DumpLogSegments,查看kafka消息落盘后信息。 如下 :如:kafka消息日志的清理逻辑是启动线程定期扫描日志文件,将符合清理规则的消息日志文件删除。
4、同样的Kafka中的Broker也会有这样的一个选举机制。每个Broker在启动时都会创建一个Kafka Controller进程。由这个Kafka Controller以及Zookeeper来选举出一个Kafka Controller Leader。
5、Kafka使用Zookeeper完成以下功能:Controller是从Broker中选举出来的,负责分区 Leader 和 Follower 的管理。当某个分区的 leader 副本发生变化,由Controller负责为该分区选举新的 leader 副本。当某个分区的同步副本集合发生变化时,由Controller负责通知所有Broker更新元数据信息。
6、这时rahbitMQ会立即将消息删除,这种情况下如果消费者出现异常而没能处理该消息(但是消息队列那边已经认为消息被消费了),就会丢失该消息。至于解决方案,采用手动确认消息即可。
1、可以看出kafka-topics.sh不能用来增加副本因子replication-factor。实际应该使用kafka bin目录下面的kafka-reassign-partitions.sh。
2、根据经验,每个boker上的分区限制在100*b*r内(b指集群内boker的数量,r指副本数量)。分区多会增加客户端的内存消耗 kafka0.2后有个比较好的特色,新的Producer可以允许用户设置一个缓冲区,缓存一定量的数据。当缓冲区数据到达设定量或者到时间,数据会从缓存区删除发往broker。
3、A)创建topic时配置参数 (B)修改topic时配置参数 覆盖已经有topic参数,下面例子修改my-topic的max message属性 (C)删除topic级别配置参数 注:配置的kafka集群的根目录为/config/mobile/mq/mafka02,因此所有节点信息都在此目录下。
4、Kafka 提供了 kafka-topics 脚步用来创建、修改、删除、查询 topic,位于${kafka_home}/bin/kafka-topics.sh,其中 kafka_home 表示 Kafka 的安装目录。一些不那么直观的选项进行单独介绍。收到指定副本数量和分区信息,该参数不能和--partitions、--replication-factor 同时使用。
5、如上图所示、kafka 中消息是以主题 topic 为基本单位进行归类的,这里的 topic 是逻辑上的概念,实际上在磁盘存储是根据分区存储的,每个主题可以分为多个分区、分区的数量可以在主题创建的时候进行指定。
1、分区实际上是调优Kafka并行度的最小单元。 对于producer而言,它实际上是用多个线程并发地向不同分区所在的broker发起Socket连接同时给这些分区发送消息;而consumer呢,同一个消费组内的所有consumer线程都被指定topic的某一个分区进行消费(具体如何确定consumer线程数目我们后面会详细说明)。
2、一个话题topic的各个分区partiton之间是并行的。在producer和broker方面,写不同的分区是完全并行的。因此一些昂贵的操作比如压缩,可以获得更多的资源,因为有多个进程。在consumer方面,一个分区的数据可以由一个consumer线程在拉去数据。分区多,并行的consumer(同一个消费组)也可以多。
3、可以遵循一定的步骤来尝试确定分区数:创建一个只有1个分区的topic,然后测试这个topic的producer吞吐量和consumer吞吐量。假设它们的值分别是Tp和Tc,单位可以是MB/s。
1、Kafka通过以下几种方式来保证消息不丢失: 分布式架构:Kafka是一个分布式系统,这意味着它能够处理大量数据,并且可以分布在多个节点上,提高了系统的可扩展性和可靠性。 复制和备份:Kafka使用副本机制来确保消息不会丢失。每个分区都有一个备份副本,可以在主分区出现故障时使用。
2、kafka为生产者提供了如下的三种可靠性级别,通过不同策略保证不同的可靠性保障。其实此策略配置的就是leader将成功接收消息信息响应给客户端的时机。
3、这种分布式的方式使得 Kafka 可以同时处理大量的消息,而且由于每个 Broker 都可以存储消息,所以 Kafka 可以在高负载下保持高性能 。
4、ack=1,简单来说就是,producer只要收到一个分区副本成功写入的通知就认为推送消息成功了。这里有一个地方需要注意,这个副本必须是leader副本。只有leader副本成功写入了,producer才会认为消息发送成功。注意,ack的默认值就是1。这个默认值其实就是吞吐量与可靠性的一个折中方案。