kafka的特点

 

  1. 一个topic中有可以有多个分区。如上图:
  2. 每个分区中保存的消息都是有序的,在每个分区中都有一个offset,在comsume中维护offset。
  3. 分区中的消息不会像其他消息队列一样消息完就丢失,而是将其保存,在指定的过期时间点内进行丢弃。
  4. 分区的特点:首先这使得每个日志的数量不会太大,可以在单个服务上保存。另外每个分区可以单独发布和消费,为并发操作topic提供了一种可能。
  5. 每个分区中的主从和redis中的士兵模式一样。
  6. 发布消息通常有两种模式:队列模式(queuing)和发布-订阅模式(publish-subscribe)。队列模式中,consumers可以同时从服务端读取消息,每个消息只被其中一个consumer读到;缺点:一旦一个进程读取了数据,这个数据就会消失。发布-订阅模式是数据发送到不属于同一个消费组的消费者中。缺点:没办法对订阅者的处理能力进行扩展。
  7. Kafka的客户端和服务器之间的通信是靠一个简单的,高性能的,与语言无关的TCP协议完成的。
  8. topic分区是消费者进行并行处理的基础。
  9. 分区中的内容是根据生产者发送的内容的顺序排列的。
  10. Kafka的消费群的推广了这两个概念。消费群可以像队列一样让消息被一组进程处理(消费群的成员),与发布 – 订阅模式一样,Kafka可以让你发送广播消息到多个消费群。

    Kafka的模型的优点是,每个主题都具有这两个属性,它可以扩展处理能力,也可以实现多个订阅者,没有必要二选一。

  11. kafka处理并发:并行性-分区-主题实现主题内的并行处理,Kafka是能够通过一组消费者的进程同时提供排序保证和负载均衡。每个主题的分区指定给每个消费群中的一个消费者,使每个分区只由该组中的一个消费者所消费。通过这样做,我们确保消费者是一个分区唯一的读者,从而顺序的消费数据。因为有许多的分区,所以负载还能够均衡的分配到很多的消费者实例上去。但是请注意,一个消费群的消费者实例不能比分区数量多。

  12. kafka的生产者提供了当消息到达队列后给予回应这时就知道消息已经到达队列,否则记录写入失败。

  13. kafka对于生产者将消息传入消息队列和将消息从消息队列放入消费者中提供了使用流进行处理,这样的好处是可以把消息队列中的历史数据和未来的数据通过相同的方式进行出理。流也解决了数据的低延迟问题。

参考内容 kafka

### Kafka API 特点和优势 #### 高效的消息传递机制 Kafka 提供了一套高效的API用于消息的生产和消费。生产者可以批量发送消息到指定的主题,这不仅提高了吞吐量还减少了网络开销[^2]。 #### 简化的消费者模型 对于开发者来说,使用Kafka高阶API能够简化消费者的开发过程。通过自动管理偏移量等功能,使得应用程序无需关心复杂的位移跟踪逻辑,从而降低了编程复杂度并提升了可靠性[^3]。 #### 强大的扩展性和容错能力 由于采用了分区复制的设计理念,即使部分Broker发生故障也不会影响整个系统的正常运行;而且当新的Broker加入集群时也十分方便,只需简单配置即可完成扩容操作[^1]。 #### 多样化接口支持 除了Java原生客户端之外,官方还提供了多种语言版本的支持(如Python、Go等),满足不同技术栈下项目集成的需求。此外,借助于Spring Boot Starter for Kafka组件,则可以让基于Spring框架构建的服务更轻松地接入此消息队列服务。 ```java // 生产者示例代码 Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); Producer<String, String> producer = new KafkaProducer<>(props); producer.send(new ProducerRecord<>("my-topic", "key", "value")); producer.close(); // 消费者示例代码 Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("group.id", "test"); props.put("enable.auto.commit", "true"); props.put("auto.commit.interval.ms", "1000"); props.put("session.timeout.ms", "30000"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); Consumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Arrays.asList("my-topic")); while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100)); for (ConsumerRecord<String, String> record : records) System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value()); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值