Kafka集群管理:大数据运维专家来教你怎样实现数据均衡与性能最大化 ...

打印 上一主题 下一主题

主题 791|帖子 791|积分 2383

Kafka 概述

Kafka 起初是 由 LinkedIn 公司采用 Scala 语言开发的一个多分区、多副本且基于 ZooKeeper 协调的分布式消息系统,现已被募捐给 Apache 基金会。
 
现在 Kafka 已经定位为一个分布式流式处置惩罚平台,它以高吞吐、可持久化、可水平扩展、支持流数据处置惩罚等多种特性而被广泛利用,主要是由 Scala 和 Java 编写。 
 
它是一种高吞吐量的分布式发布订阅消息系统,可以处置惩罚变乱流数据。通过 Kafka 你可以非常方便的把想要发布的消息,分发给任何想要订阅该消息的接收者。上游生产者只需要把消息输入到 Kafka 指定 Topic ,下游接收者只要订阅该 Topic ,就能低延时、高吞吐量的接收到上游的消息;Kafka 还支持 同一个 Topic 同时被多个下游消费者消费,且差别消费者之间数据处置惩罚进度互不干扰。

  • 对于一个 topic,他的每一个 partition 同一时间只能被同一消费者组中的一个消费者所消费
  • 相比于 AMQ,它更加轻量级:非侵入性的、依赖的东西非常少,占用资源非常少,部署简单,没有太多依赖,比力容易利用。
 
现在越来越多的开源分布式处置惩罚系统如 Cloudera、Storm、Spark、Flink 等都支持与 Kafka 集成,Kafka 之所以受到越来越多的青睐,与它所“扮演”的三大角色是分不开的: 

  • 消息系统:Kafka 和传统的消息系统(也称作消息中间件)都具备系统解耦、冗余存储、流量削峰、缓冲、异步通讯、扩展性、可恢复性等功能。与此同时,Kafka 还提供了大多数消息系统难以实现的消息次序性保障及回溯消费的功能。
  • 存储系统:Kafka 把消息持久化到磁盘,相比于其他基于内存存储的系统而言,有效地低沉了数据丢失的风险。也正是得益于 Kafka 的消息持久化功能和多副本机制,我们可以把 Kafka 作为恒久的数据存储系统来利用,只需要把对应的数据保留策略设置为“永久”或启用主题的日志压缩功能即可。
  • 流式处置惩罚平台:Kafka 不但为每个流行的流式处置惩罚框架提供了可靠的数据来源,还提供了一个完备的流式处置惩罚类库,比如窗口、连接、变更和聚合等各类操作。
Kafka 办理了什么问题

 消息队列一般主要处置惩罚:异步处置惩罚、服务解耦、流量控制,因此 Kafka 作为消息队列的一种,同样在办理这些问题。
 
说明:如果你想了解更多关于:大数据运维相关的系统情况准备、基础情况安装、集群部署以及应用组件安装等全方位的技能的问题。例如:从情况搭建/集群部署,内存扩容/问题排查,数据迁移等助你轻松应对数据管理的复杂性。可以联系我:15928721005
Kafka 技能特性 


  • 高吞吐量、低延迟:kafka 每秒可以处置惩罚几十万条消息,它的延迟最低只有几毫秒,每个 topic 可以分多个 partition, consumer group 对 partition 进行并行 consume 操作。
  • 可扩展性:kafka 集群支持热扩展
  • 持久性、可靠性:消息被持久化到本地磁盘,而且支持数据备份防止数据丢失,消息被消费仍旧不会被立即删除,而是会有过期时间。
  • 容错性:允许集群中节点失败(若副本数量为 n,则允许 n-1 个节点失败)
  • 高并发:支持数千个客户端同时读写
    队列模式:全部 consumer 都在一个队列,这样消息就在队内进行分区并行消费
    订阅-发布模式:全部 consumer 都不再一个队列,这样 topic 消息可以广播给全部订阅的消费者
Kafka 工作原理

 
Producer:消息生产者,也就是发送消息的一方。生产者负责创建消息,然后将其投递到 Kafka 中;
Consumer:消息消费者,也就是接收消息的一方。消费者连接到 Kafka 上并接收消息,进而进行相应的业务逻辑处置惩罚;
Consumer Group (CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费差别分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。全部的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
Broker:服务署理节点。对于 Kafka 而言,Broker 可以简单地看作一个独立的 Kafka 服务节点或 Kafka 服务实例。大多数情况下也可以将 Broker 看作一台 Kafka 服务器,条件是这台服务器上只部署了一个 Kafka 实例。一个或多个 Broker 组成了一个 Kafka 集群。一般而言,我们更习惯利用首字母小写的 broker 来表示服务署理节点。
 
Controller:集群中会有一个或者多个 broker,其中有一个 broker 会被选举为控制器(Kafka Controller),它负责管理整个集群中全部分区和副本的状态。

  • 当某个分区的 leader 副本出现故障时,由控制器负责为该分区选举新的 leader 副本。
  • 当检测到某个分区的 ISR 集合发生变化时,由控制器负责通知全部 broker 更新其元数据信息。
  • 当某个 Topic 增加分区数量时,同样还是由控制器负责分区的重新分配。
 
在 Kafka 中还有两个特别重要的概念—主题(Topic)与分区(Partition)
 
Topic:
可以理解为一个队列,生产者和消费者在队列的两端,一个输出数据,一个消费数据,它们面向的都是一个 topic;
 
Partition:
为了实现扩展性,一个数据量非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列;那么 topic 的并发度基本等于 partition 的个数。
 
Kafka 中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到 Kafka 集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。
主题是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个主题,很多时间也会把分区称为主题分区(Topic-Partition)。同一主题下的差别分区包含的消息是差别的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时间都会分配一个特定的偏移量(offset)。
 
offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的次序性,不外 offset 并不跨越分区,也就是说,Kafka 保证的是分区有序而不是主题有序。
 
 
如上图所示:主题中有 4 个分区,消息被次序追加到每个分区日志文件的尾部。Kafka 中的分区可以分布在差别的服务器(broker)上,也就是说,一个主题可以高出多个 broker,以此来提供比单个 broker 更强大的性能。
 
每一条消息被发送到 broker 之前,会根据分区规则选择存储到哪个具体的分区。如果分区规则设定得公道,全部的消息都可以均匀地分配到差别的分区中。如果一个主题只对应一个文件,那么这个文件所在的机器 I/O 将会成为这个主题的性能瓶颈,而分区办理了这个问题。在创建主题的时间可以通过指定的参数来设置分区的个数,当然也可以在主题创建完成之后去修改分区的数量,通过增加分区的数量可以实现水平扩展。
 
Replica:
Kafka 为分区引入了多副本(Replica)机制,通过增加副本数量可以提升容灾能力。
同一分区的差别副本中保存的是相同的消息(在同一时刻,副本之间并非完全一样),副本之间是“一主多从”的关系,其中 leader 副本负责处置惩罚读写请求,follower 副本只负责与 leader 副本的消息同步。副本处于差别的 broker 中,当 leader 副本出现故障时,从 follower 副本中重新选举新的 leader 副本对外提供服务。Kafka 通过多副本机制实现了故障的主动转移,当 Kafka 集群中某个 broker 失效时仍旧能保证服务可用。
 
 
如上图所示:Kafka 集群中有 4 个 broker,某个主题中有 3 个分区,且副本因子(即副本个数)也为 3,如此每个分区便有 1 个 leader 副本和 2 个 follower 副本。生产者和消费者只与 leader 副本进行交互,而 follower 副本只负责消息的同步,很多时间 follower 副本中的消息相对 leader 副本而言会有一定的滞后。
 
Kafka 消费端也具备一定的容灾能力。Consumer 利用拉(Pull)模式从服务端拉取消息,而且保存消费的具体位置,当消费者宕机后恢复上线时可以根据之前保存的消费位置重新拉取需要的消息进行消费,这样就不会造成消息丢失。
 
说明:如果你想了解更多关于:大数据运维相关的系统情况准备、基础情况安装、集群部署以及应用组件安装等全方位的技能的问题。例如:从情况搭建/集群部署,内存扩容/问题排查,数据迁移等助你轻松应对数据管理的复杂性。可以联系我:15928721005
Kafka 写流程

 
 
  • 连接 zk 集群,从 zk 中拿到对应的 topic 的 partition 信息和 partition 的 leader 的相关信息。注:Kafka 2.8.0 已移出对 zookeeper 的依赖。
  • 向对应 broker 发消息
  • 客户端在发送消息时,必须指定消息所属的 Topic 和消息值 Value,此外还可以指定消息所属的 Partition 以及消息的 Key。
  • 对消息做序列化处置惩罚
  • 如果消息记载中指定了 Partition,则 Partitioner 不做任何事情;否则,Partitioner 根据消息的 key 得到一个 Partition。这是生产者就知道向哪个 Topic 下的哪个 Partition 发送这条消息。
  • 消息被添加到相应的 batch 中,独立的线程将这些 batch 发送到 Broker 上(注意,消息不是一条一条发往 broker 的,而是会在 客户端本地缓存一批数量后,在发出去,因此客户端是以 批-batch 为单位发送消息的,即一批当中包含一条或多条消息;同样,broker 也是以批为单位进行数据存储的,反面会讲到 )。
  • broker 收到消息会返回一个响应。如果消息成功写入 Kafka,则返回成功信息,内容包含了 Topic 信息、Patition 信息、消息在 Partition 中的 Offset 信息;若失败,返回一个错误。
    Kafka 读流程

  • 连接 zk 集群,从 zk 中拿到对应的 topic 的 partition 信息和 partition 的 leader 的相关信息
  • 连接到对应的 leader 对应的 broker
  • consumer 通过请求将盼望读取的 topic、partition 以及对应的 offset 发送给 leader
  • leader 根据 offset 等信息定位到 segment(索引文件和日志文件)
  • 根据索引文件中的内容,定位到日志文件中该偏移量对应的开始位置读取相应长度的数据并返回给 consumer
    Kafka 运维

    Kafka 的命令行工具路径:xxx/kafka/bin/下
     
    Topic 管理指令

    可以管理 Topic ,包括 创建、删除、分区扩容、查询 Topic 详细信息、查看 Topic 列表 等
    命令工具:kafka-topics.sh
    1. # 创建 Topic:
    2. kafka-topics.sh --create --zookeeper  localhost:2181 --replication-factor 3 --partitions 3 --topic test
    3.  
    4. # Topic 分区扩容
    5. kafka-topics.sh --zookeeper  localhost:2181 --alter --topic test --partitions 4
    6.  
    7. # 删除 Topic:
    8. kafka-topics.sh --delete --zookeeper  localhost:2181 localhost:9092 --topic test
    9.  
    10. #查询 Topic 详细信息
    11. [DEV (v.v) sa_cluster@hybrid03 bin]$ ./kafka-topics.sh --topic event_topic --zookeeper  localhost:2181 --describe
    12. Topic:event_topic   PartitionCount:10   ReplicationFactor:2 Configs:compression.type=gzip
    13.     Topic: event_topic  Partition: 0    Leader: 1001    Replicas: 1001,1003 Isr: 1001,1003
    14.     Topic: event_topic  Partition: 1    Leader: 1003    Replicas: 1003,1002 Isr: 1003,1002
    15.     Topic: event_topic  Partition: 2    Leader: 1002    Replicas: 1002,1001 Isr: 1002,1001
    16.     Topic: event_topic  Partition: 3    Leader: 1001    Replicas: 1001,1002 Isr: 1001,1002
    17.     Topic: event_topic  Partition: 4    Leader: 1003    Replicas: 1003,1001 Isr: 1003,1001
    18.     Topic: event_topic  Partition: 5    Leader: 1002    Replicas: 1002,1003 Isr: 1002,1003
    19.     Topic: event_topic  Partition: 6    Leader: 1001    Replicas: 1001,1003 Isr: 1001,1003
    20.     Topic: event_topic  Partition: 7    Leader: 1003    Replicas: 1003,1002 Isr: 1003,1002
    21.     Topic: event_topic  Partition: 8    Leader: 1002    Replicas: 1002,1001 Isr: 1002,1001
    22.     Topic: event_topic  Partition: 9    Leader: 1001    Replicas: 1001,1002 Isr: 1001,1002
    23.  
    24. #列出全部 Topic
    25. kafka-topics.sh --bootstrap-server xxxxxx:9092 --list --exclude-internal
    复制代码
     
    增删节点后的数据均衡

    增加数据节点后,虽然新节点上已经启动了 broker ,但 kafka 不会主动均衡数据,需要手动实验。
    命令工具:kafka-reassign-partitions.sh
    编写设置文件 move-json-file.json ,告诉 kafka 你盼望哪些 topic 要重新分区:
    1. 1 {
    2. 2     "topics": [{
    3. 3             "topic": "event_topic"
    4. 4         },
    5. 5         {
    6. 6             "topic": "profile_topic"
    7. 7         },
    8. 8         {
    9. 9             "topic": "item_topic"
    10. 10         }
    11. 11     ],
    12. 12     "version": 1
    13. 13 }
    复制代码
     
    实验命令生成分配信息:要注意的是,此时分区移动尚未开始,它只是告诉你当前的分配和发起。保存当前分配,以防你想要回滚它。
    1. # 下面 --broker-list 参数 对应的是 brokerid
    2. [DEV (v.v) cluster@hybrid03 bin]$ ./kafka-reassign-partitions.sh --zookeeper localhost:2181 --topics-to-move-json-file ~/mv.json --broker-list "1001,1002" --generate
    3. Current partition replica assignment #当前分配信息
    4. {"version":1,"partitions":[{"topic":"event_topic","partition":2,"replicas":[1002,1001],"log_dirs":["any","any"]},{"topic":"event_topic","partition":8,"replicas":[1002,1001],"log_dirs":["any","any"]},{"topic":"event_topic","partition":3,"replicas":[1001,1002],"log_dirs":["any","any"]},{"topic":"event_topic","partition":6,"replicas":[1001,1003],"log_dirs":["any","any"]},{"topic":"event_topic","partition":9,"replicas":[1001,1002],"log_dirs":["any","any"]},{"topic":"item_topic","partition":0,"replicas":[1001,1003],"log_dirs":["any","any"]},{"topic":"event_topic","partition":0,"replicas":[1001,1003],"log_dirs":["any","any"]},{"topic":"event_topic","partition":5,"replicas":[1002,1003],"log_dirs":["any","any"]},{"topic":"profile_topic","partition":2,"replicas":[1001,1003],"log_dirs":["any","any"]},{"topic":"profile_topic","partition":1,"replicas":[1002,1001],"log_dirs":["any","any"]},{"topic":"event_topic","partition":4,"replicas":[1003,1001],"log_dirs":["any","any"]},{"topic":"event_topic","partition":1,"replicas":[1003,1002],"log_dirs":["any","any"]},{"topic":"event_topic","partition":7,"replicas":[1003,1002],"log_dirs":["any","any"]},{"topic":"profile_topic","partition":0,"replicas":[1003,1002],"log_dirs":["any","any"]}]}
    5.  
    6. Proposed partition reassignment configuration #分配后的信息
    7. {"version":1,"partitions":[{"topic":"event_topic","partition":7,"replicas":[1002,1001],"log_dirs":["any","any"]},{"topic":"profile_topic","partition":1,"replicas":[1002,1001],"log_dirs":["any","any"]},{"topic":"event_topic","partition":1,"replicas":[1002,1001],"log_dirs":["any","any"]},{"topic":"item_topic","partition":0,"replicas":[1001,1002],"log_dirs":["any","any"]},{"topic":"event_topic","partition":4,"replicas":[1001,1002],"log_dirs":["any","any"]},{"topic":"event_topic","partition":9,"replicas":[1002,1001],"log_dirs":["any","any"]},{"topic":"event_topic","partition":6,"replicas":[1001,1002],"log_dirs":["any","any"]},{"topic":"event_topic","partition":3,"replicas":[1002,1001],"log_dirs":["any","any"]},{"topic":"event_topic","partition":8,"replicas":[1001,1002],"log_dirs":["any","any"]},{"topic":"profile_topic","partition":0,"replicas":[1001,1002],"log_dirs":["any","any"]},{"topic":"event_topic","partition":0,"replicas":[1001,1002],"log_dirs":["any","any"]},{"topic":"event_topic","partition":5,"replicas":[1002,1001],"log_dirs":["any","any"]},{"topic":"profile_topic","partition":2,"replicas":[1001,1002],"log_dirs":["any","any"]},{"topic":"event_topic","partition":2,"replicas":[1001,1002],"log_dirs":["any","any"]}]}
    复制代码
     
    将上面得到盼望的重新分配方式文件保存在一个 json 文件内里:reassignment-json-file.json,然后通过参数 —execute 实验分配:
     
    该命令也可以用于以下利用场景:

    • 给分区增加副本,你只需要在 第 2 步生成的内容内里, 在 replicas 参数中加入你想要增加的 副本所在 broker id 信息即可,这样实验的时间会主动在 对应 broker 上创建副本。
    • 重新分配分区
     
    消费情况指令

    查看 group 的消费情况
    1. 1 # group: 指定group id名字
    2. 2 ./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092  --describe --group test-group
    3. 3
    4. 4 # 示例:
    5. 5 # TOPIC: group对应的topic
    6. 6 # PARTITION:aprtition编号,从0开始0-5表示有6个partition
    7. 7 # CURRENT-OFFSET:此消费着当前已消费的offset
    8. 8 # LOG-END-OFFSET:生产者在此partition分区上已提交确认的offset
    9. 9 # LAG:两个offset的差值,就是常说的积压。此数值过大为异常。
    10. 10 # HOST:消费者所在的服务器ip 
    11. 11 # CLIENT-ID:消费者的信息
    12. 12 ./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group  test-group
    13. 13 2.删除group
    复制代码
     
    删除 group
     1 ./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --delete --group test-group  
    重新设置消费者位移
    1. 1 Earliest策略:把位移调整到当前最早位移处
    2. 2
    3. 3 bin/kafka-consumer-groups.sh --bootstrap-server kafka-host:port --group test-group --reset-offsets --all-topics --to-earliest –execute
    4. 4
    5. 5 Latest策略:把位移调整到当前最新位移处
    6. 6
    7. 7 bin/kafka-consumer-groups.sh --bootstrap-server kafka-host:port --group test-group --reset-offsets --all-topics --to-latest --execute
    8. 8 Current策略:把位移调整到当前最新提交位移处
    9. 9
    10. 10 bin/kafka-consumer-groups.sh --bootstrap-server kafka-host:port --group test-group --reset-offsets --all-topics --to-current --execute
    11. 11 Specified-Offset策略:把位移调整到指定位移处
    12. 12
    13. 13 bin/kafka-consumer-groups.sh --bootstrap-server kafka-host:port --group test-group --reset-offsets --all-topics --to-offset <offset> --execute
    14. 14 Shift-By-N策略:把位移调整到当前位移+N处(N可以是负值)
    15. 15
    16. 16 bin/kafka-consumer-groups.sh --bootstrap-server kafka-host:port --group test-group  --topic test --reset-offsets --shift-by <offset_N> --execute
    17. 17 DateTime策略:(把位移调整到大于给定时间的最小位移处)
    18. 18 时间需要减8
    19. 19 bin/kafka-consumer-groups.sh --bootstrap-server kafka-host:port --group test-group   --topic test --reset-offsets --to-datetime 2019-06-20T20:00:00.000 --execute
    20. 20 Duration策略:把位移调整到距离当前时间指定间隔的位移处,然后将位移调整到距离当前给定时间间隔的位移处,具体格式是 PnDTnHnMnS。
    21. 21     以字母 P 开头,后面由 4 部分组成,即 D、H、M 和 S,分别表示天、小时、分钟和秒。
    22. 22
    23. 23 bin/kafka-consumer-groups.sh --bootstrap-server kafka-host:port --group test-group --reset-offsets --by-duration PT0H30M0S --execute
    复制代码
     
    设置 Topic 过期时间
    1. 1 # 设置 topic 过期时间(单位 毫秒)
    2. 2 ### 3600000 毫秒 = 1小时
    3. 3 ./bin/kafka-configs.sh --zookeeper 127.0.0.1:2181 --alter --entity-name topic-devops-elk-log-hechuan-huanbao --entity-type topics --add-config retention.ms=3600000
    4. 4
    5. 5 # 查看 topic 配置
    6. 6 ./bin/kafka-configs.sh --zookeeper 127.0.0.1:2181 --describe --entity-name topic-devops-elk-log-hechuan-huanbao --entity-type topics
    复制代码
     
    说明:如果你想了解更多关于:大数据运维相关的系统情况准备、基础情况安装、集群部署以及应用组件安装等全方位的技能的问题。例如:从情况搭建/集群部署,内存扩容/问题排查,数据迁移等助你轻松应对数据管理的复杂性。可以联系我:15928721005
    工具相关

    利用脚本生产/消费消息
    1. 1 # 连接到test-topic,然后通过输入+会车生产消息
    2. 2 $ bin/kafka-console-producer.sh --broker-list kafka-host:port --topic test-topic  --producer-property
    3. 3 >
    4. 4
    5. 5 # --from-beginning: 指定从开始消费消息,否则会从最新的地方开始消费消息
    6. 6 $ bin/kafka-console-consumer.sh --bootstrap-server kafka-host:port --topic test-topic --group test-group --from-beginning --consumer-property 
    复制代码
     
    kafka 性能测试
    1. 1 # 测试生产者
    2. 2 # 向指定主题发送了 1 千万条消息,每条消息大小是 1KB
    3. 3 # 它会打印出测试生产者的吞吐量 (MB/s)、消息发送延时以及各种分位数下的延时
    4. 4 $ bin/kafka-producer-perf-test.sh --topic test-topic --num-records 10000000 --throughput -1 --record-size 1024 --producer-props bootstrap.servers=kafka-host:port acks=-1 linger.ms=2000 compression.type=lz4
    5. 5
    6. 6 2175479 records sent, 435095.8 records/sec (424.90 MB/sec), 131.1 ms avg latency, 681.0 ms max latency.
    7. 7 4190124 records sent, 838024.8 records/sec (818.38 MB/sec), 4.4 ms avg latency, 73.0 ms max latency.
    8. 8 10000000 records sent, 737463.126844 records/sec (720.18 MB/sec), 31.81 ms avg latency, 681.00 ms max latency, 4 ms 50th, 126 ms 95th, 604 ms 99th, 672 ms 99.9th.
    9. 9
    10. 10 # 测试消费者性能
    11. 11
    12. 12 $ bin/kafka-consumer-perf-test.sh --broker-list kafka-host:port --messages 10000000 --topic test-topic
    13. 13 start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec, rebalance.time.ms, fetch.time.ms, fetch.MB.sec, fetch.nMsg.sec
    14. 14 2019-06-26 15:24:18:138, 2019-06-26 15:24:23:805, 9765.6202, 1723.2434, 10000000, 1764602.0822, 16, 5651, 1728.1225, 1769598.3012
    复制代码
     
    Kafka 常用性能调优

    磁盘目录优化

    kafka 读写的单位是 partition,因此将一个 topic 拆分为多个 partition 可以提高吞吐量。但是这里有个条件,就是差别 partition 需要位于差别的磁盘(可以在同一个机器)。如果多个 partition 位于同一个磁盘,那么意味着有多个进程同时对一个磁盘的多个文件进行读写,使得操作系统会对磁盘读写进行频繁调度,也就是破坏了磁盘读写的连续性。
     
    说明:如果你想了解更多关于:大数据运维相关的系统情况准备、基础情况安装、集群部署以及应用组件安装等全方位的技能的问题。例如:从情况搭建/集群部署,内存扩容/问题排查,数据迁移等助你轻松应对数据管理的复杂性。可以联系我:15928721005
    JVM 参数设置

    保举利用最新的 G1 来取代 CMS 作为垃圾回收器。保举 Java 利用的最低版本为 JDK 1.7u51。
     
    G1 相比力于 CMS 的上风:

    • G1 是一种适用于服务器端的垃圾回收器,很好的平衡了吞吐量和响应能力
    • 对于内存的划分方法差别,Eden, Survivor, Old 区域不再固定,利用内存会更高效。
      G1 通过对内存进行 Region 的划分,有效避免了内存碎片问题。
    • G1 可以指定 GC 时可用于停息线程的时间(不保证严格遵守)。
      而 CMS 并不提供可控选项。
    • CMS 只有在 FullGC 之后会重新合并压缩内存,而 G1 把回收和合并集合在一起。
    • CMS 只能利用在 Old 区,在清算 Young 时一般是配合利用 ParNew,而 G1 可以同一两类分区的回收算法。
     
    日志数据刷盘策略

    为了大幅度提高 producer 写入吞吐量,需要定期批量写文件。
    有 2 个参数可设置:

    • log.flush.interval.messages = 100000:
      每当 producer 写入 100000 条数据时,就把数据刷到磁盘
    • log.flush.interval.ms=1000:
      每隔 1 秒,就刷一次盘
    日志保留时间

    当 kafka server 的被写入海量消息后,会生成很多数据文件,且占用大量磁盘空间,如果不及时清算,可能导致磁盘空间不够用,kafka 默认是保留 7 天。

    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
  • 本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具 举报

    0 个回复

    倒序浏览

    快速回复

    您需要登录后才可以回帖 登录 or 立即注册

    本版积分规则

    来自云龙湖轮廓分明的月亮

    金牌会员
    这个人很懒什么都没写!

    标签云

    快速回复 返回顶部 返回列表