美文网首页
【Hazelcast系列十】可靠主题(Reliable Topi

【Hazelcast系列十】可靠主题(Reliable Topi

作者: 大哥你先走 | 来源:发表于2020-02-12 22:20 被阅读0次

在前一片文章中我们介绍了Hazelcast中的主题,但是由于没有数据的备份,主题中的事件可能丢失,为了提高数据可靠性Hazelcast提供了可靠主题。可靠主题也使用ITopic 接口,为了保证数据的可靠性,可靠主题使用Ringbuffer 数据结构备份主题的事件。和普通主题相比,可靠主题有以下优势:

  • 主题中的事件不会丢失。Ringbuffer默认有一个同步备份。
  • 每个可靠主题使用独立的Ringbuffer,各个主题之间互不影响。
  • 在脑裂环境中可靠主题无法工作。

下面是使用可靠主题发布事件的代码样例:

import com.hazelcast.core.Hazelcast
import kotlinx.coroutines.runBlocking

fun main() = runBlocking {
    val instance = Hazelcast.newHazelcastInstance()
    val topic = instance.getReliableTopic<Long>("reliable")
    var messageId = 1L
    while (true) {
        topic.publish(messageId)
        messageId++
        kotlinx.coroutines.delay(200L)
    }
}

一个可靠主题的订阅者:

import com.hazelcast.core.Hazelcast
import kotlinx.coroutines.runBlocking

fun main() = runBlocking<Unit> {
    val instance = Hazelcast.newHazelcastInstance();
    val topic = instance.getReliableTopic<Long>("reliable")
    topic.addMessageListener {
        println(it.messageObject)
    }
}

在创建一个可靠主题时,Hazelcast会为主题自动创建一个Ringbuffer。Ringbuffer的名字和可靠主题的名字相同,可以通过添加一个Ringbuffer配置对可靠主题对应的Ringbuffer进行配置。对于Ringbuffer可以配置容量、主题消息的TTL,设置可以配置持久存储。下面是一个对名字为“reliable”可靠主题使用的Ringbuffer配置的样例:

<hazelcast>
    ...
    <ringbuffer name="reliable">
        <capacity>1000</capacity>
        <time-to-live-seconds>5</time-to-live-seconds>
    </ringbuffer>
    <reliable-topic name="reliable">
        <topic-overload-policy>BLOCK</topic-overload-policy>
    </reliable-topic>
    ...
</hazelcast>

默认,可靠主题使用一个共享的线城池,如果想得到更好的隔离,可以通过ReliableTopicConfig 配置。Ringbuffer读是非破坏性的,因此实现批量读更加简单,ITopic 每次最多读取10条数据。

缓慢的消费者

可靠主题提供了对消费速度慢的消费的控制和管理方法。因为不知道速度慢的消费者何时能赶上,因此将对应的事件无限期保存在内存中是不明智的。可以通过Ringbuffer的容量来对内存中的数量进行限制,当Ringbuffer存储的数据量超过容量限制,可以选择下面的四种策略进行处理:

  • DISCARD_OLDEST: 丢弃老数据,即使设置了TTL。
  • DISCARD_NEWEST: 丢弃新数据。
  • BLOCK: 阻塞直到有数据过期。
  • ERROR: 立即抛出TopicOverloadException 异常。

配置可靠主题

声明式配置:

<hazelcast>
    ...
    <reliable-topic name="default">
        <statistics-enabled>true</statistics-enabled>
        <message-listeners>
            <message-listener>
                ...
            </message-listener>
        </message-listeners>
        <read-batch-size>10</read-batch-size>
        <topic-overload-policy>BLOCK</topic-overload-policy>
    </reliable-topic>
    ...
</hazelcast>

可靠主题的配置参数有以下四项:

  • statistics-enabled: 默认值 true,是否开启统计。
  • message-listener: 事件监听器。
  • read-batch-size: 批量读大小,默认10.
  • topic-overload-policy: 事件超过容量限制时的处理策略。

相关文章

网友评论

      本文标题:【Hazelcast系列十】可靠主题(Reliable Topi

      本文链接:https://www.haomeiwen.com/subject/irdhfhtx.html