kafka

深入理解Kafka高吞吐量原理与特性
本文详细解析了Kafka的高吞吐量原理,包括数据磁盘持久化、支持数据批量发送与拉取、数据压缩、分区处理机制及消费者控制的Offset系统。同时介绍了Kafka的集群策略,包括基于时间与大小删除旧数据的方法,以及消息路由机制与HA机制的实现。

二、kafka


1、开发流程

    produce

Properties props = new Properties();
// 此处配置的是kafka的端口
props.put("metadata.broker.list", broker_list);
// 配置value的序列化类
props.put("serializer.class", serializer);
// 配置key的序列化类
props.put("key.serializer.class", key);
props.put("request.required.acks", acks);
producer = new Producer<String, String>(new ProducerConfig(props));
KeyedMessage<String, String> keyedMessage = new KeyedMessage<String, String>(topic, key, data);
producer.send(keyedMessage);
consumer
    Properties props = new Properties();
        //zookeeper 配置
        props.put("zookeeper.connect", connect);
        //group 代表一个消费组
        props.put("group.id", group_id);
        //zk连接超时
        props.put("zookeeper.session.timeout.ms", session_timeout);
        props.put("zookeeper.sync.time.ms", sync);
        props.put("auto.commit.interval.ms", interval);
        props.put("auto.offset.reset", offset_reset);
        //序列化类
        props.put("serializer.class", serializer);
        ConsumerConfig config = new ConsumerConfig(props);
        consumer = kafka.consumer.Consumer.createJavaConsumerConnector(config);
Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
        topicCountMap.put(topic, new Integer(1));
        StringDecoder keyDecoder = new StringDecoder(new VerifiableProperties());
        StringDecoder valueDecoder = new StringDecoder(new VerifiableProperties());
        Map<String, List<KafkaStream<String, String>>> consumerMap =  consumer.createMessageStreams(topicCountMap,keyDecoder,valueDecoder);
        KafkaStream<String, String> stream = consumerMap.get(topic).get(0);

2、高吞吐量原理:  数据磁盘持久化:消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能。

  支持数据批量发送和拉取。

  支持数据压缩。

                   Topic划分为多个partition,提高并行处理能力。

  因为每条消息都被append到该Partition中,属于顺序写磁盘,因此效率非常高(经验证,顺序写磁盘效率比随机写内存还要高,这是Kafka高吞吐率的一个很重要的保证

  offet由Consumer控制,所以Kafka broker是无状态的,它不需要标记哪些消息被哪些消费过,也不需要通过broker去保证同一个Consumer Group只有一个Consumer能消费某一条消息,因此也就不需要锁机制,这也为Kafka的高吞吐率提供了有力保障

3、特新

Kafka集群会保留所有的消息,无论其被消费与否。当然,因为磁盘限制,不可能永久保留所有数据(实际上也没必要),因此Kafka提供两种策略删除旧数据。

一是基于时间,二是基于Partition文件大小。例如可以通过配置$KAFKA_HOME/config/server.properties

log.segment.bytes

消息被路由到哪个partition上,有producer客户端决定.比如可以采用"random""key-hash""轮询"等

在JMS实现中,Topic模型基于push方式,即broker将消息推送给consumer端.不过在kafka中,采用了pull方式,即consumer在和broker建立连接之后,主动去pull(或者说fetch)消息;

这中模式有些优点,首先consumer端可以根据自己的消费能力适时的去fetch消息并处理,且可以控制消息消费的进度(offset);

4.HA机制

Kafka分配Replica的算法如下:


将所有Broker(假设共n个Broker)和待分配的Partition排序

将第i个Partition分配到第(i mod n)个Broker上

将第i个Partition的第j个Replica分配到第((i + j) mode n)个Broker上


转载于:https://my.oschina.net/u/1259702/blog/631987

06-07
### Kafka 使用教程和核心技术详解 Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,并于 2011 年开源。它被设计为高吞吐量、低延迟的消息系统,广泛用于日志收集、监控数据聚合、流式数据处理等领域[^1]。 #### Kafka 的核心概念 Kafka 的架构围绕几个关键概念展开: - **主题(Topic)**:Kafka 中消息的类别或提要名称。生产者将消息发布到特定主题,消费者从主题中订阅消息。 - **分区(Partition)**:每个主题可以划分为多个分区,分区是 Kafka 中并行处理的基础单位。 - **副本(Replica)**:为了提高可靠性,Kafka 会为每个分区创建多个副本,分布在不同的 Broker 上。 - **消费者组(Consumer Group)**:消费者可以组成一个组来共同消费一个主题的消息,组内的每个消费者负责处理一部分分区的消息[^2]。 #### Kafka 的使用方法 Kafka 提供了多种客户端库以支持不同编程语言的开发。以下是一个简单的 Python 示例,展示如何使用 Kafka 生产者和消费者: ```python from kafka import KafkaProducer, KafkaConsumer # 创建 Kafka 生产者 producer = KafkaProducer(bootstrap_servers='localhost:9092') # 发送消息到指定主题 producer.send('my-topic', b'Hello, Kafka!') producer.flush() producer.close() # 创建 Kafka 消费者 consumer = KafkaConsumer( 'my-topic', bootstrap_servers='localhost:9092', auto_offset_reset='earliest', enable_auto_commit=True, group_id='my-group' ) # 消费消息 for message in consumer: print(f"Received message: {message.value.decode('utf-8')}") ``` #### Kafka 的核心技术详解 Kafka 的核心技术主要包括以下几个方面: - **持久化日志**:Kafka 将消息存储在磁盘上,并通过顺序写入操作优化性能。这种设计使得 Kafka 能够提供高吞吐量和持久性保证。 - **分区与并行性**:通过将主题划分为多个分区,Kafka 实现了水平扩展的能力。每个分区可以独立地被多个消费者消费。 - **复制机制**:Kafka 的复制机制确保了即使某些 Broker 出现故障,数据仍然可用。领导者分区负责读写操作,而跟随者分区则同步数据[^3]。 - **消费者偏移量管理**:Kafka 允许消费者自行管理偏移量,这为灵活的消费模式提供了支持,例如重新消费旧消息或跳过某些消息。 #### Kafka 的学习资料 对于初学者,可以从官方文档入手,了解 Kafka 的基本概念和配置选项。此外,还有许多在线课程和书籍可以帮助深入理解 Kafka 的原理和实践[^4]。 ```markdown - 官方文档: https://kafka.apache.org/documentation/ - 在线课程: Coursera、Udemy 等平台提供的 Kafka 课程 - 推荐书籍: "Kafka: The Definitive Guide" by Neha Narkhede, Gwen Shapira, and Todd Palino ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值