暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kafka-2.3.0新版本发布说明 - 热乎

orchome 2019-07-14
503

Kafka 2.3.0包含很多重要的新功能。以下是一些值得注意的变化的汇总:


  • Kafka Connect REST API的一些改进。

  • Kafka Connect现在支持增量协作重新平衡。

  • Kafka Streams现在支持内存session存储和window存储。

  • AdminClient现在允许用户确定他们有权对topic执行哪些操作。

  • 新的broker启动时间指标。

  • JMXTool现在可以连接到安全的RMI端口。

  • 增加了新的AlterConfigs API。旧的AlterConfigs API已被弃用。

  • 追踪最小ISR计数下的分区。

  • 消费者现在可以选择不自动topic创建,即使在broker上启用它也是一样。

  • Kafka组件现在可以使用外部配置存储(KIP-421)。

  • 我们在遇到错误时实现了改进的副本拉取程序行为。



主要特性讲解


KIP-351和KIP-427:改进了对 lost replicas
的分区监控


    为了保证 Kafka 的数据安全,Kafka 在不同的 Broker 上创建了几个副本。除非分区具有最小数量的同步副本,否则 Kafka 将不允许继续写入,这被称为“最小ISR”。


    Kafka 已经有指标可以显示分区数量少于同步副本的最小数量。在此版本中,KIP-427 添加了其他指标,显示具有最小同步副本数的分区。通过监视这些指标,用户可以看到哪些分区的副本将不足,从而影响写。

    

    此外,KIP-351 将 –under-min-isr 标签添加到 kafka-topics 命令里面。这使用户可以轻松查看哪些主题的副本数量少于最小 ISR 数量。


KIP-354:添加最大日志压缩延迟


    对于一阶近似(first-order approximation),压缩主题中的键的先前值在写入最新密钥之后的某个时间被压缩,只有最新值可用,而以前的值不可用。但是,始终可以设置密钥在压缩之前保持的最短时间,因此我们不会太快丢失旧值。现在,使用 KIP-354,可以设置旧值将保持的最大时间量。新参数 max.log.compation.time.ms 指定旧值可能存在于压缩主题中的时间长度,这可用于遵守GDPR等数据保留规定。

    

KIP-402:提高 SocketServer 处理器的公平性


    以前,Kafka 会优先考虑在处理现有连接时打开新的 TCP 连接。如果客户端尝试在短时间内创建许多新连接,则可能会出现问题。KIP-402 将现有连接优先用于新连接,从而提高了 broker 对连接风暴的恢复能力。这个KIP 还为每个 broker 添加了 max.connections 参数。

    

KIP-461:改进 Replica Fetcher 中的故障处理


    为了使副本保持最新,每个 broker 都维护一个 Replica Fetcher 线程池。池中的每个线程负责为一些跟随者分区获取副本。以前,如果其中一个分区失败,整个线程将失败,从而导致可能数百个分区的副本不足。使用此KIP,如果给定副本提取程序线程管理的单个分区失败,则该线程将继续处理其余分区。

    

KAFKA-7283:减少 broker 在启动时扫描日志文件所花费的时间


    当 broker 在不正常关闭后启动时,它会检查日志以确保它们没有被破坏。此 JIRA 优化该过程,以便 Kafka 仅检查尚未显式刷新到磁盘的日志段。现在,日志恢复所需的时间不再与日志数成比例。相反,它与未刷新的日志段的数量成比例。Zhanxiang Huang 在 JIRA 上讨论的一些基准测试显示,broker 的启动时间缩短了50%。


详细


以下是kafka 2.3.0
版本中解决JIRA问题的摘要,有关该版本的完整文档,入门指南以及关于该项目的信息,请参考Kafka官方文档,或kafka中文教程。


有关升级的注意事项:在升级你的集群之前,请仔细阅读此版本的升级文档。升级有关不兼容性和破坏性的变更,性能变化以及可能影响Kakfa生产的任何其他变化。


新功能


    [KAFKA-4730] - Streams没有内存窗口存储
    [KAFKA-7283] - mmap惰性地索引并跳过恢复点以下的段的健全性检查
    [KAFKA-7730] - 限制broker中活动连接的总数
    [KAFKA-7904] - KIP-427: 添加AtMinIsr主题分区的类别(新指标和TopicCommand选项)
    [KAFKA-7922] - 在描述响应中返回授权操作(KIP-430
    [KAFKA-8265] - 连接客户端配置覆盖策略
    [KAFKA-8365] - follower获取的协议和消费者支持


    改进[KAFKA-3816] - 使用MDCKafka Connect日志消息中提供更多上下文
    [KAFKA-5505] - 连接:不要在任务集变更时重新启动连接器和现有任务
    [KAFKA-6161] -SerializerDeserializerSerde添加默认close()和configure()实现
    [KAFKA-6399] - 考虑减少Kafka Streams的“max.poll.interval.ms”默认值
    [KAFKA-6455] - 改善DSL级别的时间戳传播
    [KAFKA-6474] - 重写测试以使用新的公共TopologyTestDriver
    [KAFKA-6521] -KTable仓库中存储消息时间戳
    [KAFKA-7236] - 添加--under-min-isr选项来描述topic命令
    [KAFKA-7243] - 添加单元集成测试以验证Kafka Streams中的指标
    [KAFKA-7320] -KafkaConsumer中提供禁用自动topic创建的功能
    [KAFKA-7321] - 确保及时处理Kafka主题中的删除请求(基于时间的日志压缩)
    [KAFKA-7440] - 在消费者获取请求中使用leader epoch
    [KAFKA-7466] - 实现KIP-339:创建一个新的IncrementalAlterConfigs API
    [KAFKA-7487] - DumpLogSegments报告索引offset的不匹配,这些offset不在消息批次的开头
    [KAFKA-7492] - reduceaggregate的`null`处理解释说明
    [KAFKA-7747] - 消费者应在leader变更后检查截断情况
    [KAFKA-7811] -KafkaConsumer提交offset时,避免不必要的锁获取
    [KAFKA-7847] - KIP-421: 自动解决外部配置。
    [KAFKA-7864] - AdminZkClient.validateTopicCreate()应验证分区是否从0开始
    [KAFKA-7875] - 添加KStream#flatTransformValues
    [KAFKA-7918] - Streams存储清理:内联字节存储通用参数
    [KAFKA-7930] - StreamsResetter制作“changelog”主题命名假设
    [KAFKA-7933] - KTableKTableLeftJoinTest需要一个小时才能完成
    [KAFKA-7944] - 添加更自然的抑制测试
    [KAFKA-7956] - 如果线程尚未启动,要避免在ShutdownableThread.awaitShutdown中阻塞
    [KAFKA-7963] - 将硬编码的Streams度量标准名称字符串提取到集中位置
    [KAFKA-7986] - 将日志记录与不同的ZooKeeperClient实例区分开来
    [KAFKA-7992] - 添加服务器启动时间度量标准
    [KAFKA-8006] - Guard在用户代码中调用init()和close())
    [KAFKA-8007] - 内存窗口存储提取时的副本
    [KAFKA-8014] - 扩展Connect集成测试以动态添加和删除workers程序
    [KAFKA-8029] - 增加内存中仅字节的会话存储实现
    [KAFKA-8060] - Kafka协议生成器应允许字符串的null默认值
    [KAFKA-8094] - 使用getkey)迭代缓存效率很低
    [KAFKA-8126] - 片测试org.apache.kafka.connect.runtime.WorkerTest.testAddRemoveTask
    [KAFKA-8131] ---version参数添加到命令行帮助输出和文档
    [KAFKA-8168] - 添加生成的ApiMessageType
    [KAFKA-8169] - 关于流快速入门文档的错误主题
    [KAFKA-8215] - 限制RocksDB的内存使用量
    [KAFKA-8231] - 扩展Connect ClusterState接口
    [KAFKA-8294] - 批处理StopReplica请求删除分区并添加测试用例
    [KAFKA-8309] - KIP-465: 添加Consolidated Connector Endpoint以连接REST API
    [KAFKA-8336] -broker中启用客户端SSL工厂的动态更新
    [KAFKA-8346] - 在处理分区故障时改进副本提取程序行为
    [KAFKA-8347] - 选择要处理的下一条消息(按时间戳)
    [KAFKA-8348] - kafkaStreams改进的文档
    [KAFKA-8428] - 清理LogValidator#validateMessagesAndAssignOffsetsCompressed仅假设单个记录批次

    Bug

      [KAFKA-3143] - 当所有副本都死了时,ZK中的状态不一致
      [KAFKA-3522] - 考虑将版本信息添加到rocksDB存储格式中
      [KAFKA-4893] - 异步topic删除与最大topic长度冲突
      [KAFKA-5061] - 应该为Connect生产者/消费者设置client.id
      [KAFKA-5141] - WorkerTest.testCleanupTasksOnStop由于NPE导致的瞬时故障
      [KAFKA-6569] - OffsetIndex和TimeIndex构造中的反射
      [KAFKA-6635] - 生产者关闭不等待待处理的交易
      [KAFKA-7026] - Sticky assignor可以为多个消费者分配一个分区(KIP-341
      [KAFKA-7455] - JmxTool无法连接到启用SSL的JMX RMI端口
      [KAFKA-7652] - Kafka Streams Session存储性能从0.10.2.2降至0.11.0.0
      [KAFKA-7703] - 调用“seekToEnd”后,KafkaConsumer.position可能会返回错误的offset
      [KAFKA-7763] - 当网络断开10-20秒时,具有transactionId无效的KafkaProducer等待
      [KAFKA-7801] - TopicCommand不能改变事务topic分区计数
      [KAFKA-7813] - 当--object-name时,JmxTool抛出NPE省略
      [KAFKA-7831] - Consumer SubscriptionState缺少同步
      [KAFKA-7855] - Kafka Streams Maven Archetype快速入门无法立即使用
      [KAFKA-7896] - 添加一些Log4J Kafka属性以生成安全broker
      [KAFKA-7912] - 内存中的key-value仓库不支持并发访问
      [KAFKA-7921] - 不稳定的KafkaStreamsTest
      [KAFKA-7939] - 片测试KafkaAdminClientTest#testCreateTopicsRetryBackoff
      [KAFKA-7946] - 片测试DeleteConsumerGroupsTest#testDeleteNonEmptyGroup
      [KAFKA-7961] - 通过正在进行的重新平衡处理订阅变更
      [KAFKA-7962] - 如果删除topic,则在分配期间抛出NullPointerException
      [KAFKA-7965] - 片测试ConsumerBounceTest#testRollingBrokerRestartsWithSmallerMaxGroupSizeConfigDisruptsBigGroup
      [KAFKA-7974] - 初始DNS查找失败时,KafkaAdminClient丢失工作线程/进入僵尸状态
      [KAFKA-7976] - 片测试DynamicBrokerReconfigurationTest#testUncleanLeaderElectionEnable
      [KAFKA-7989] - 片测试RequestQuotaTest#testResponseThrottleTimeWhenBothFetchAndRequestQuotasViolated
      [KAFKA-8013] - 从部分正确的缓冲区读取Struct时,避免缓冲区下溢
      [KAFKA-8052] - FETCH请求中的间歇性INVALID_FETCH_SESSION_EPOCH错误
      [KAFKA-8058] - ConnectRestExtensionContext不会从其ConnectClusterState返回连接器列表
      [KAFKA-8062] - 当StreamThread死亡时,不会通知StateListener
      [KAFKA-8063] - 片测试WorkerTest#testConverterOverrides
      [KAFKA-8091] - 片测试DynamicBrokerReconfigurationTest#testAddRemoveSaslListener
      [KAFKA-8098] - 片测试AdminClientIntegrationTest#testConsumerGroups
      [KAFKA-8111] - KafkaProducer无法生成数据
      [KAFKA-8114] - 片测试DelegationTokenEndToEndAuthorizationTest#testNoGroupAcl
      [KAFKA-8121] - ZooKeeperClient会话到期线程可能会在关闭后留下客户端
      [KAFKA-8134] - ProducerConfig.LINGER_MS_CONFIG在kafka-clients 2.1中没有记录重大变更
      [KAFKA-8142] - 如果消息在header中包含空值,则用NPE的Kafka Streams失败。
      [KAFKA-8157] - 设置“segment index bytes”时缺少“key.serializer”异常
      [KAFKA-8181] - 关于序列化的Streams文档包括Avro标头,但没有内容
      [KAFKA-8187] - 使用备用任务时,状态存储在多次重新分配中的消息丢失
      [KAFKA-8190] - 没有文件变更的密钥库更新不会更新SSLContext
      [KAFKA-8199] - 废弃后后尝试groupBy时出现ClassCastException
      [KAFKA-8204] - Streams可能以错误的顺序刷新状态存储
      [KAFKA-8208] - KStreams Core Concepts doc中无序数据的断开链接
      [KAFKA-8209] - 核心概念文档中KStreams DSL的错误链接
      [KAFKA-8210] - 在Streams DSL文档中缺少KStreams的链接
      [KAFKA-8227] - 缺少Streams和Tables的二元性链接部分
      [KAFKA-8229] - 当commitRequest为true时,连接Sink Task更新nextCommit
      [KAFKA-8232] - 片测试kafka.admin.TopicCommandWithAdminClientTest.testTopicDeletion
      [KAFKA-8240] - Source.equals()可能会因NPE而失败
      [KAFKA-8241] - 没有truststore的监听,导致密钥库动态更新失败
      [KAFKA-8254] -禁止错误地将空topic传递给serdes
      [KAFKA-8275] - NetworkClient leastLoadedNode选择应考虑受限制的节点
      [KAFKA-8277] - 修复在ConnectHeaders的NPE
      [KAFKA-8289] - KTable, Long>无法抑制
      [KAFKA-8290] - Streams不关闭任务关闭的Fenced Producer
      [KAFKA-8291] - 分支上的系统测试consumer_test.py失败
      [KAFKA-8298] - 优化重新分区节点时可能报ConcurrentModificationException
      [KAFKA-8304] - 注册REST扩展时,连接易受死锁影响
      [KAFKA-8313] - 关闭后KafkaStreams状态未正确更新
      [KAFKA-8320] - 连接错误处理来自通用包的RetriableException
      [KAFKA-8323] - BloomFilter Rocks对象的内存泄漏
      [KAFKA-8324] - 用户构造了RocksObjects泄漏内存
      [KAFKA-8332] - 处理JoinGroupRequest时的回归不允许基于优先顺序的确定性协议选择
      [KAFKA-8344] - 修复vagrant-up.sh以正确使用AWS
      [KAFKA-8351] - 日志清理程序必须处理跨多个段的事务
      [KAFKA-8352] - 连接系统测试失败了404
      [KAFKA-8363] - 配置提供程序解析已损坏
      [KAFKA-8376] - 片测试ClientAuthenticationFailureTest.testTransactionalProducerWithInvalidCredentials test.
      [KAFKA-8379] - 片测试KafkaAdminClientTest.testUnreachableBootstrapServer
      [KAFKA-8381] - 用于broker间监听器的SSL工厂已失效
      [KAFKA-8404] - 转发REST请求时,不会在Connect中传递授权的标头
      [KAFKA-8407] - 连接器客户端覆盖在类型为“Class”或“List”的客户端配置上报错
      [KAFKA-8415] - 接口ConnectorClientConfigOverridePolicy需要从类加载隔离中排除
      [KAFKA-8418] - Connect System测试不等待注册REST资源
      [KAFKA-8422] - 客户端不应使用旧版本的OffsetsForLeaderEpoch
      [KAFKA-8425] - KIP 421 Bug: 修改不可变源Map导致Java异常
      [KAFKA-8426] - KIP 421 Bug: ConfigProvider配置与KIP-297不一致的参数
      [KAFKA-8446] - 当消息值为空时,Kafka Streams恢复与NPE崩溃
      [KAFKA-8449] - 在增量协作重新平衡下重新启动重新配置任务
      [KAFKA-8463] - 修复leader离开时,修复多余的任务重新分配
      [KAFKA-8473] - 调整Connect系统测试以进行增量协作重新平衡,并使其能够进行预期和增量协作重新平衡
      [KAFKA-8475] - 暂时恢复SslFactory.sslContext()帮助器
      [KAFKA-8483] - 生产者在UNKNOWN_PRODUCER_ID错误后可能重新排序消息
      [KAFKA-8484] - ProducerId重置可能引起IllegalStateException

      任务


        [KAFKA-7766] - 改善Jenkins构建的失败快速行为
        [KAFKA-8155] - 更新2.2.0和2.1.1版本的Streams系统测试
        [KAFKA-8308] - 更新jetty以获取安全漏洞CVE-2019-10241

        希望


          [KAFKA-7950] - Kafka工具GetOffsetShell -time描述
          测试

            [KAFKA-8118] - 确保测试关闭ZooKeeper客户端,因为它们可能会影响后续测试

            子任务

              [KAFKA-7832] - 在CreateTopics中使用自动RPC生成
              [KAFKA-7862] - 修改JoinGroup逻辑以合并group.instance.id更改
              [KAFKA-7972] - 用自动协议替换SaslHandshake请求/响应
              [KAFKA-7997] - 用自动协议替换SaslAuthenticate请求/响应
              [KAFKA-8090] - 使用自动协议替换ControlledShutdown请求/响应
              [KAFKA-8220] - 避免通过重新平衡超时来踢出成员
              [KAFKA-8225] - 处理冲突的静态成员ID
              [KAFKA-8284] - 在KStream上启用静态成员身份
              [KAFKA-8285] - 在JVM上为KStream处理thread-id随机切换
              [KAFKA-8373] - 将group.instance.id字段添加到Sync/Heartbeat/OffsetCommit协议中
              [KAFKA-8386] - 当组不可用时,使用COORDINATOR_NOT_AVAILABLE替换UNKNOWN_MEMBER_ID
              
                              
              文章转载自orchome,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论