Kafka
文章平均质量分 84
85程序员老王
以下框架的中文版已译“Spring for Apache Kafka”、“Spring Data Elasticsearch”、“Spring Data MongoDB”、“Spring Data Redis”
展开
-
Spring整合Kafka(一)----快速指南
本系列文章基于spring-kafka 3.1.1版本。原创 2023-11-27 09:14:11 · 427 阅读 · 0 评论 -
Spring整合Kafka(二)----producer发送消息
ProducerFactory这个bean设置了producer的各项属性,包括bootstrap.servers,key.serializer,value.serializer,batch.size,linger.ms,这里batch.size=20kB,是指批量发送的消息大小以20KB为单位,linger.ms=5000ms是指消息延迟5秒发送,当batch.size和linger.ms中的一个条件先达到时,producer发送数据到broker。原创 2024-01-02 15:25:24 · 544 阅读 · 1 评论 -
Spring整合Kafka(三)----接收消息
例如,如果你有3个topic,每topic5个分区,你希望使用concurrency=15,但是结果你只能看到5个活跃的consumer,每个consumer分配了每个topic的一个分区,留下10个空闲的consumer。此类采用RecordFilterStrategy的实现,在该实现中,你可以实现filter方法来发出消息是重复的并且应该丢弃的信号。另一个一个方便的方法getAllListenerContainers(),它返回所有容器的集合,包括由registry管理的容器和声明为bean的容器。原创 2024-01-08 09:34:56 · 1124 阅读 · 1 评论 -
Spring整合Kafka(四)----监听器容器属性
表4. ConcurrentMessageListenerContainer 属性。表3. KafkaMessageListenerContainer 属性。表 2. AbstractListenerContainer 属性。表1.ContainerProperties 属性。原创 2024-01-15 10:29:06 · 430 阅读 · 0 评论 -
Spring整合Kafka(五)----动态创建容器
有几种技术可用于在运行时创建监听器容器。本文将探讨其中的一些技术。原创 2024-01-15 21:26:03 · 329 阅读 · 0 评论 -
Spring整合Kafka(六)----应用程序事件
默认情况下,应用程序上下文的event multicaster调用calling thread上的事件监听器。如果将multicaster更改为使用异步执行器,则在事件包含对consumer的引用时,不得调用任何consumer方法。ListenerContainerNoLongerIdleEvent 具有相同的属性,除了idleTime和paused。ListenerContainerPartitionNoLongerIdleEvent具有相同的属性,除了idleTime和paused。原创 2024-01-16 10:24:51 · 721 阅读 · 1 评论 -
Spring整合Kafka(七)----Topic/Partition初始偏移量&定位到特定的偏移量
在初始化后的任意时间进行seek时,应使用此回调。当在onIdleContainer或onPartitionsAssigned方法中为多个分区seek到相同的时间戳时,首选第二种方法,因为在对consumer的offsetsForTimes方法的单个调用中查找时间戳的偏移量更有效。例如,您可以使用此方法,通过调用回调来设置分区的初始偏移量。您还可以使用此方法将此线程的回调与分配的分区相关联(请参阅下面的示例)。要在运行时任意seek,请使用相应线程的registerSeekCallback中的回调引用。原创 2024-01-16 16:31:11 · 873 阅读 · 1 评论 -
Spring整合Kafka(八)----容器工厂
如果你想创建几个具有类似属性的容器,或者希望使用一些外部配置的工厂,例如Spring Boot自动配置提供的工厂,这可能会很有用。创建容器后,你可以进一步修改其属性,其中许多属性是通过使用container.getContainerProperties()设置的。中所讨论的,ConcurrentKafkaListenerContainerFactory用于为带注解的方法创建容器。你可以向工厂添加ContainerCustomizer,以便在创建和配置每个容器后对其进行进一步配置。原创 2024-01-17 14:44:05 · 492 阅读 · 0 评论 -
Spring整合Kafka(九)----线程安全
为了便于清理线程状态(对于前面列表中的第二项和第三项),监听器容器在每个线程退出时发布一个ConsumerStoppedEvent。请注意,SimpleThreadScope不会销毁具有销毁接口的bean(如DisposableBean),因此你应该自己destroy()实例。因此,监听器需要是线程安全的,最好使用无状态监听器。默认情况下,应用程序上下文的事件multicaster唤起调用线程上的事件监听器。如果将multicaster更改为使用异步执行器,则线程清理无效。原创 2024-01-17 16:24:25 · 426 阅读 · 0 评论 -
Spring整合Kafka(十)----监控
并返回可以与micrometerTags中的任何静态标签合并的标签。如果在类路径上检测到Micrometer,并且应用程序上下文中存在单个MeterRegistry,则监听器容器将自动为监听器创建和更新Micrometer timers。如果在类路径上检测到Micrometer,并且应用程序上下文中存在单个MeterRegistry,则template将自动创建和更新用于发送操作的Micrometer timers。>并返回可以与micrometerTags中的任何静态标签合并的标签。原创 2024-01-17 20:07:43 · 918 阅读 · 0 评论 -
Spring整合Kafka(十一)----事务
本文描述Spring for Apache Kafka如何支持事务。原创 2024-01-18 09:29:26 · 688 阅读 · 1 评论 -
Spring整合Kafka(十二)----将Spring bean注入到生产者/消费者拦截器中
如果您有多个通过Spring管理的生产者拦截器需要应用于KafkaTemplate,则需要使用CompositeProducerInterceptor。这些对象是由Kafka管理的,而不是Spring,所以普通的Spring依赖注入不能用于注入依赖的Spring bean。当提到生产者拦截器时,你可以让Spring直接将其作为bean进行管理,而不是将拦截器的类名提供给Apache Kafka生产者配置。以下是使用上面相同的MyProducerInterceptor的示例,但已更改为不使用内部配置属性。原创 2024-01-18 16:54:14 · 445 阅读 · 1 评论 -
Spring整合Kafka(十三)----暂停和恢复监听器容器&暂停和恢复监听器容器上的分区
当容器暂停时,它会继续poll() consumer,避免在使用组管理的情况下进行再平衡(rebalance),容器暂停的时候不拉取任何记录。你可以通过在监听器容器中使用pausePartition(TopicPartition topicPartition)和resumePartition(TopicPartition topicPartition)方法暂停和恢复分配给该consumer的特定分区消费。暂停和恢复分别发生在poll()之前和之后,类似于pause()和resume()方法。原创 2024-01-18 20:55:31 · 400 阅读 · 1 评论 -
Spring整合Kafka(十四)----序列化、反序列化和消息转换
Apache Kafka提供了一个高级API来序列化和反序列化记录值以及它们的键(keys)。它存在于org.apache.kafka.common.serialization.Serializer和org.apache.kafka.common.serialization.Deserializer抽象和一些内置实现中。同时,我们可以通过使用Producer或Consumer配置属性来指定序列化器和反序列化器类。...原创 2024-01-19 12:24:10 · 566 阅读 · 1 评论 -
Spring整合Kafka(十五)----消息头
2.3版本以后,字符串值headers的处理被简化了。如果没有转换器(可能是因为Jackson不存在,也可能是因为它被明确设置为null),consumer记录中的头将在“KafkaHeaders.NATIVE_HEADERS”提供,并且是未转换的。使用batch converter,转换后的headers可在“KafkaHeaders.BATCH_CONVERTED_HEADERS”中作为List获得,其中列表中某个位置的map对应于payload中的数据位置。原创 2024-01-22 10:12:35 · 615 阅读 · 0 评论 -
Spring整合Kafka(十六)----空payload和‘Tombstone‘记录的日志压缩
要使用KafkaTemplate发送null负载,可以将null传递到send()方法的value参数中,但一个例外是send(Message message)变体。>不能有null payload,你可以使用一种称为KafkaNull的特殊payload类型,并且框架会发送null。当你使用类级别的@KafkaListener时,有多个@KafkaHandler方法,需要一些额外的配置。当你使用Log Compaction时,你可以发送和接收具有空payload的消息,以识别key的删除。原创 2024-01-23 13:56:47 · 677 阅读 · 1 评论 -
Spring整合Kafka(十七)----处理异常
请参阅CommonErrorHandler中的javadocs。要替换ErrorHandler或ConsumerAwareErrorHandler实现,你应该实现handleOne(),并让seeksAfterHandle()返回false(默认值)。你还应该实现handleOtherException(),以处理发生在记录处理范围之外的异常(例如consumer错误)。原创 2024-01-23 14:24:44 · 649 阅读 · 1 评论 -
Spring整合Kafka(十八)----非阻塞重试
所有消息处理和BackOff都由consumer线程处理,因此,在尽最大努力的基础上保证了延迟精度。如果一条消息的处理时间比该消费者的下一条消息back off时间长,则下一条信息的延迟将高于预期。此外,对于短延迟(约1秒或更短),线程必须做的维护工作,如提交偏移量,可能会延迟消息处理的执行。如果重试主题的consumer正在处理多个分区,则精度也会受到影响,因为我们依赖于从轮询中唤醒consumer,并使用完整的pollTimeouts来进行时间调整。原创 2024-01-27 14:50:45 · 659 阅读 · 0 评论 -
Spring整合Kafka(十九)----Apache Kafka Streams支持
从1.1.4版本开始,Spring for Apache Kafka为Kafka Streams提供了非常好的支持。要从Spring应用程序中使用它,kafka-streams jar必须存在于类路径中。它是Spring for Apache Kafka项目的一个可选依赖项,不会自动下载。原创 2024-01-29 11:29:32 · 1858 阅读 · 0 评论 -
Spring整合Kafka(二十)----测试应用
spring-kafka-test jar包含一些有用的工具来帮助测试你的应用程序。原创 2024-01-29 13:46:27 · 687 阅读 · 0 评论 -
Spring整合Kafka(二十一)----提示,技巧和例子
有关详细信息,请参阅。假设你希望始终从所有分区读取所有记录(例如,当使用compacted topic加载分布式缓存时),手动分配分区而不使用Kafka的组管理会很有用。如果希望使用属性配置序列化器/反序列化器,但又希望使用自定义的ObjectMapper,只需创建一个子类并将自定义映射器传递给super构造函数。如果Kafka事务提交失败,记录将被重新deliver,因此数据库更新应该是幂等的。KafkaTemplate会将自己的事务与DB的事务同步,提交/回滚发生在数据库的行为之后。原创 2024-01-29 21:14:16 · 1326 阅读 · 0 评论