Aggregate functions 跨Apache Pulsar函数访问状态
我希望有一个函数聚合事件并在bookkeeper中维护状态,同时允许处理不同事件的其他函数利用该状态(通过键访问,或通过键范围查找状态) 我无法通过上下文对象找到任何方法,有其他方法吗?您可以利用Aggregate functions 跨Apache Pulsar函数访问状态,aggregate-functions,apache-pulsar,Aggregate Functions,Apache Pulsar,我希望有一个函数聚合事件并在bookkeeper中维护状态,同时允许处理不同事件的其他函数利用该状态(通过键访问,或通过键范围查找状态) 我无法通过上下文对象找到任何方法,有其他方法吗?您可以利用 /** * Update the state value for the key. * * @param key name of the key * @param value state value of the key */ void putState(String key, Byte
/**
* Update the state value for the key.
*
* @param key name of the key
* @param value state value of the key
*/
void putState(String key, ByteBuffer value);
及
只要在函数之间协调要使用的键,就可以使用的方法来完成此操作。聚合函数将使用putState方法和预定义键执行计算并存储数据,如下所示:
public class AggregateFunction implements Function<String, Void> {
@Override
public Void process(String input, Context context) {
ByteBuffer value;
// Calculate value and place in ByteBuffer
context.putState("PRE-DETERMINED-KEY", value);
}
公共类聚合函数实现函数{
@凌驾
公共无效进程(字符串输入、上下文){
ByteBuffer值;
//计算值并放入ByteBuffer
上下文。putState(“预先确定的键”,值);
}
}
然后,消费函数可以像这样访问该值
public class ConsumingFunction implements Function<String, String> {
@Override
public String process(String input, Context context) {
ByteBuffer value = context.gettState("PRE-DETERMINED-KEY");
// Perform logic based on the value.
return "";
}
公共类ConsumingFunction实现函数{
@凌驾
公共字符串进程(字符串输入、上下文){
ByteBuffer value=context.getState(“预定义键”);
//根据值执行逻辑。
返回“”;
}
}我认为这不起作用,因为状态的作用域是单个函数-从Pulsar文档:状态是键值对,其中键是字符串,值是任意二进制数据-计数器存储为64位big-endian二进制值。键的作用域是单个Pulsar函数,并在实例之间共享我一直在寻找类似的东西,基本上是一种通过Pulsar直接使用bookkeeper的方法。但这似乎不是真的可能(目前)。如果它不是很多状态,你也许可以将它与消息一起发送,作为其属性的一部分。
public class ConsumingFunction implements Function<String, String> {
@Override
public String process(String input, Context context) {
ByteBuffer value = context.gettState("PRE-DETERMINED-KEY");
// Perform logic based on the value.
return "";
}