`
mdxdjh2
  • 浏览: 12275 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Kafka 简记

    博客分类:
  • JAVA
阅读更多

引言

接触一门新的开源项目,最关键就是了解其特性和理解中间的设计原理。但在面对庞大的设计官档或者源码的并且又没人指导的时候,总是会让人望而却步,加之网上资料太过冗长。结合翻阅的资料和查看官档后进行了一些简单介绍和总结,只针对Kafka 0.9.0.1版本。

原理

Kakfa之所以快,是因为它基于文件系统,通过page cache实现了io顺序读写达到高速吞吐的性能。kafka通过os缓存替换了Java缓存,在减少了gc的情况,防止缓存多份的情况下也降低了维护难度。 

名词

  • Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上。
  • Partition:是Kafka中横向扩展和一切并行化的基础,每个Topic都至少被切分为1个Partition。
  • Offset:消息在Partition中的编号,编号顺序不跨Partition。
  • Consumer:用于从Broker中取出/消费Message。
  • Producer:用于往Broker中发送/生产Message。
  • Replication:Kafka支持以Partition为单位对Message进行冗余备份,每个* Partition都可以配置至少1个Replication(当仅1个Replication时即仅该Partition本身)。
  • Leader:每个Replication集合中的Partition都会选出一个唯一的Leader,所有的读写请求都由Leader处理。其他Replicas从Leader处把数据更新同步到本地,过程类似大家熟悉的MySQL中的Binlog同步。
  • Broker:Kafka中使用Broker来接受Producer和Consumer的请求,并把Message持久化到本地磁盘。每个Cluster当中会选举出一个Broker来担任Controller,负责处理Partition的Leader选举,协调Partition迁移等工作。
  • ISR(In-Sync Replica):是Replicas的一个子集,表示目前Alive且与Leader能够“Catch-up”的Replicas集合。由于读写都是首先落到Leader上,所以一般来说通过同步机制从Leader上拉取数据的Replica都会和Leader有一些延迟(包括了延迟时间和延迟条数两个维度),任意一个超过阈值都会把该Replica踢出ISR。每个Partition都有它自己独立的ISR。

优势

  • 文本系统io顺序流读写,速度快。
  • 0.8以上版本添加了ack机制,进一步防止数据丢失。
  • (zero-copy)调用系统级别函数sendfile(直接把硬盘数据从kernel buffer拷贝到kernel socket buffer,减少了user mode和kernel mode的上下文切换),从而提高性能。

特性

  • offset:0.82版本之前存储在zk里面,但是由于使用zk client频繁写入是一个低效的操作,所以在0.82以后的版本引入了native offset storage,利用了kafka的compacted topic,在内存中维护offset,达到快速存取的效果,同时也会生成checkpoint到log目录用以恢复offset。
  • partition:一旦某个client连接到几个partition后,不管你消不消费,这个partition都被这个client占据着,没法被别的client消费了,rebalancing后才会重新分配partition。
  • consumer在同一个group中只能消费一次

技巧

  • 因为相同consumer同一个group只能消费一次,那么使用相同group.id相当于传统mq的点对点,不同group.id的时候相当于订阅发布。
  • 由于一个partition同时只能被一个consumer消费,所以consumer数不要大于partition数,最优的方案是consumer数和partition数保持一致。

遇到问题

1、出现消息重复消费

Kafka是使用poll()(长轮询)拉取消息,流程可以简单理解为: 拉取消息->向kafka broker发送心跳->提交 offset。当消费者处理过慢(session timeout为30s)没有向kafka broker发送心跳,而且没有提交 offset,broker就会发起rebalancing,这个分区就会分配给其他消费者重复消费。最坏的情况是一直在 rebalancing,新的消息都不会被消费。

解决方法:
增大session.timeout.ms的心跳间隔时间,减少max.partition.fetch.bytes每次从分区拉取的消息量,以降低这种reblancing的情况。另一种方法就是poll出来的数据丢入线程池进行额外消费,快递吞吐消息,弊端就是宕机的时候会导致部分消息丢失。(PS:第二种方法只适应于只追求性能速度,无所谓数据丢失的场景)

2、Kafka 0.9.0.1 server.properties配置bug

advertised.host.name理论上应该按照下面的策略进行,但是因为存在bug,不生效

Hostname the broker will advertise to producers and consumers. 
If not set, it uses the value for "host.name" if configured.    

Otherwise, it will use the value returned from
java.net.InetAddress.getCanonicalHostName().

解决方法:
同时设置advertised.host.name和host.name为相应的ip即可。

 

 

 

 

分享到:
评论

相关推荐

    kafka 插件kafka 插件kafka 插件

    **Kafka插件详解** Kafka插件是Apache Kafka与各种工具集成的重要组成部分,它使得开发者和运维人员能够更方便地在不同的系统中利用Kafka的功能。Kafka是一款分布式流处理平台,常用于构建实时数据管道和流应用,...

    kafkatool 连接kafka工具

    **Kafka Tool 连接 Kafka 工具详解** 在大数据处理和实时流处理领域,Apache Kafka 是一个不可或缺的组件,它作为一个分布式的消息中间件,提供高效、可扩展且可靠的发布订阅服务。为了方便管理和操作 Kafka 集群,...

    5、kafka监控工具Kafka-Eagle介绍及使用

    Apache Kafka 是一个分布式流处理平台,常用于构建实时的数据管道和应用。Kafka 提供了高吞吐量、低延迟的消息传递能力,是大数据领域中重要的消息队列(MQ)解决方案。Kafka-Eagle 是针对 Kafka 集群设计的一款高效...

    kafka-java-demo 基于java的kafka生产消费者示例

    【Kafka基础知识】 Kafka是由Apache开发的分布式流处理平台,它主要被设计用来处理实时数据流。在大数据处理领域,Kafka常被用于构建实时数据管道和流应用,能够高效地处理大量的实时数据。 【Java与Kafka的结合】...

    springboot 基于spring-kafka动态创建kafka消费者

    在Spring Boot应用中,我们可以利用Spring Kafka框架来与Apache Kafka进行集成,实现高效的消息传递。本文将详细探讨如何在Spring Boot项目中基于Spring Kafka动态创建Kafka消费者。 首先,了解Kafka基本概念:...

    Kafka实例Kafka实例

    在IT行业中,Kafka是一个非常重要的分布式流处理平台,由LinkedIn开发并贡献给了Apache软件基金会。Kafka实例是实现大规模实时数据处理的关键组件,广泛应用于日志聚合、流数据分析、消息传递等多个领域。本篇文章将...

    Kafka技术内幕:图文详解Kafka源码设计与实现+书签.pdf+源码

    《Kafka技术内幕:图文详解Kafka源码设计与实现》是一本深入解析Apache Kafka的专著,旨在帮助读者理解Kafka的核心设计理念、内部机制以及源码实现。这本书结合图文并茂的方式,使得复杂的概念变得更为易懂。同时,...

    Kafka Tool linux版本,适用于kafka0.11及以上

    **Kafka Tool for Linux: 管理与使用Apache Kafka集群的高效工具** Apache Kafka是一款分布式流处理平台,常用于构建实时数据管道和流应用。Kafka Tool是针对Kafka集群进行管理和操作的一款图形用户界面(GUI)工具...

    Kafka详细课程讲义

    **Kafka详细课程讲义** 本课程主要涵盖了Apache Kafka的核心概念、安装配置、架构解析、API使用以及监控与面试知识点,旨在帮助学习者全面理解并掌握这一强大的分布式流处理平台。 **第 1 章 Kafka 概述** Apache...

    kafka kafka kafka kafka kafka

    Kafka 概述与架构 Kafka 是一种流行的消息队列系统,广泛应用于构建实时数据管道和流媒体应用程序。它具有水平扩展、容错、高速运行等特点,已经在数千家公司的生产环境中运行。 架构概述 Kafka 的架构主要由三个...

    使用netty实现TCP长链接消息写入kafka以及kafka批量消费数据

    在IT行业中,网络通信和大数据处理是两个至关重要的领域,Netty和Kafka分别是这两个领域的佼佼者。Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于开发高并发、低延迟的网络应用,如TCP服务器。而Kafka...

    Kafka尚硅谷.rar

    **Kafka概述** Kafka是由LinkedIn开发并贡献给Apache软件基金会的一个开源消息系统,它是一个高性能、可扩展的分布式消息中间件。Kafka最初设计的目标是处理网站活动流数据,但随着时间的发展,它已被广泛应用于...

    Kafka技术内幕-图文详解Kafka源码设计与实现

    Kafka自LinkedIn开源以来就以高性能、高吞吐量、分布式的特性著称,本书以0.10版本的源码为基础,深入分析了Kafka的设计与实现,包括生产者和消费者的消息处理流程,新旧消费者不同的设计方式,存储层的实现,协调者...

    kafka2种工具 kafkatool-64bit.exe kafka-eagle-bin-1.4.6.tar.gz

    在IT行业中,Kafka是一种广泛使用的分布式流处理平台,它由Apache软件基金会开发,主要用于构建实时数据管道和流应用。本文将围绕标题和描述中提到的两种Kafka工具——kafkatool-64bit.exe和kafka-eagle-bin-1.4.6....

    kafka客户端生产者消费者kafka可视化工具(可生产和消费消息)

    1、使用bootstrap、userName、password连接kafka。 2、可使用text、json格式发送topic消息。 3、异步producer、customer,收发消息畅通无阻。 Kafka生产者的主要作用是将应用程序产生的数据发送到Kafka集群的主题中...

    kafka资源下载kafka_2.11-2.0.0.tgz

    ### 关于Kafka资源下载kafka_2.11-2.0.0.tgz的知识点 #### Kafka简介 Apache Kafka是一种开源的消息队列服务,它最初由LinkedIn开发,并于2011年成为Apache软件基金会的一个顶级项目。Kafka因其高性能、可扩展性和...

    Kafka the Definitive Guide 2nd Edition

    Kafka the Definitive Guide Kafka 是一个分布式流媒体平台,用于构建实时数据处理和流媒体处理系统。下面是 Kafka 的一些重要知识点: 1. Kafka 概述 Kafka 是一个基于发布/订阅模式的消息队列系统,由 LinkedIn...

    Kafka Tool Mac版本,适用于kafka0.11及以上

    **Kafka Tool for Mac: 管理与使用Apache Kafka集群的理想选择** Kafka Tool是一款专为Apache Kafka设计的强大管理工具,尤其适用于Mac用户。它提供了直观的图形用户界面(GUI),使得对Kafka集群的操作变得简单易...

    Kafka Tool 2.0.4.zip

    Kafka Tool 2.0.4是一款专为Kafka设计的强大的客户端工具,尤其适用于Mac操作系统。它提供了一种直观且可视化的界面,让用户能够轻松地连接到Kafka服务并进行各种操作,包括但不限于管理Topic、监控集群状态以及进行...

    Apache Kafka实战.pdf

    《Apache Kafka实战》这本书深入浅出地介绍了Apache Kafka这一分布式流处理平台的各个方面,旨在帮助读者掌握Kafka的实际应用和核心概念。Kafka是一个高吞吐量、低延迟的消息发布订阅系统,常用于构建实时数据管道和...

Global site tag (gtag.js) - Google Analytics