You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@flink.apache.org by "harshit.varshney@iktara.ai" <Ha...@iktara.ai> on 2022/06/02 14:01:24 UTC
Issue Facing While Using EmbeddedRocksDbCheckpointing FlinkVersion(1.15.0)
Dear Team,
I am new to pyflink and request for your support in issue I am facing with
Pyflink. I am using Pyflink version 1.15.0 & using reference code from
pyflink reference code.
The errors I am getting
Traceback (most recent call last):
File
"E:\pythonProject16\lib\site-packages\apache_beam\runners\worker\data_plane.
py", line 470, in input_elements
element = received.get(timeout=1)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38\lib\queue.py",
line 178, in get
raise Empty
_queue.Empty
RuntimeError: Channel closed prematurely.
My code is:
import json
import os
import time
from datetime import datetime
from pyflink.common import SimpleStringSchema, JsonRowDeserializationSchema,
Types, JsonRowSerializationSchema
from pyflink.datastream import StreamExecutionEnvironment, WindowFunction,
HashMapStateBackend, CheckpointingMode, \
FileSystemCheckpointStorage, KeyedProcessFunction, RuntimeContext,
EmbeddedRocksDBStateBackend, RocksDBStateBackend
from pyflink.datastream.connectors import FlinkKafkaConsumer,
FlinkKafkaProducer
from pyflink.datastream.state import ValueStateDescriptor, StateTtlConfig,
ListStateDescriptor
from sklearn.preprocessing import LabelEncoder
import pickle
import pandas as pd
from pyflink.common import Row
import argparse
from typing import Iterable
from pyflink.datastream.connectors import FileSink, OutputFileConfig,
RollingPolicy
from pyflink.common import Types, WatermarkStrategy, Time, Encoder
from pyflink.common.watermark_strategy import TimestampAssigner
from pyflink.datastream import StreamExecutionEnvironment,
ProcessWindowFunction
from pyflink.datastream.window import TumblingEventTimeWindows, TimeWindow,
TumblingProcessingTimeWindows
class MyTimestampAssigner(TimestampAssigner):
def extract_timestamp(self, value, record_timestamp) -> int:
return int(value[0])
class CountWindowFunction(WindowFunction[tuple, tuple, str, TimeWindow]):
def apply(self, key: str, window: TimeWindow, inputs: Iterable[tuple]):
# return [(key, result)]
return [(key, len([e for e in inputs]))]
class Storage(KeyedProcessFunction):
def __init__(self):
self.state = None
def open(self, runtime_context: RuntimeContext):
state_descriptor = ValueStateDescriptor("state", Types.FLOAT())
state_ttl_config = StateTtlConfig \
.new_builder(Time.days(7)) \
.set_update_type(StateTtlConfig.UpdateType.OnReadAndWrite) \
.disable_cleanup_in_background() \
.build()
state_descriptor.enable_time_to_live(state_ttl_config)
self.state = runtime_context.get_state(state_descriptor)
def process_element(self, value, ctx: 'KeyedProcessFunction.Context'):
# retrieve the current count
current = self.state.value()
if current is None:
current = 0
current = value[1]
self.state.update(current)
yield current,time.time()
def write_to_kafka():
env = StreamExecutionEnvironment.get_execution_environment()
env.set_parallelism(1)
env.enable_checkpointing(1000)
env.get_checkpoint_config().set_min_pause_between_checkpoints(5000)
env.set_state_backend(EmbeddedRocksDBStateBackend())
env.get_checkpoint_config().set_checkpointing_mode(CheckpointingMode.AT_LEAS
T_ONCE)
#env.get_checkpoint_config().enable_unaligned_checkpoints()
check = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'checkpoint-dir11')
env.get_checkpoint_config().set_checkpoint_storage(FileSystemCheckpointStora
ge("file:///{}".format(check)))
kafka_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'flink-sql-connector-kafka_2.11-1.14.4.jar')
env.add_jars("file:///{}".format(kafka_jar))
rocksdb_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'flink-statebackend-rocksdb_2.11-1.0.0.jar')
env.add_jars("file:///{}".format(rocksdb_jar))
# deserialization_schema = SimpleStringSchema()
deserialization_schema = JsonRowDeserializationSchema.builder() \
.type_info(type_info=Types.ROW_NAMED(["time_stamp",
"Bill_number", "Store_Code",
"itemdescription", "Item_code",
"Gross_Price", "Discount",
"Net_Price",
"purchaseorReturn",
"Membership_No",
"Billing_Date", "Billing_Time"],
[Types.DOUBLE(),
Types.STRING(), Types.INT(), Types.STRING(),
Types.STRING(), Types.FLOAT(),
Types.FLOAT(), Types.FLOAT(),
Types.STRING(),
Types.STRING(), Types.STRING(),
Types.STRING()])).build()
kafka_consumer = FlinkKafkaConsumer(
topics='test',
deserialization_schema=deserialization_schema,
properties={'bootstrap.servers': '192.168.1.37:9092', 'group.id':
'test_group1'})
ds = env.add_source(kafka_consumer)
# ds.print()
watermark_strategy = WatermarkStrategy.for_monotonous_timestamps() \
.with_timestamp_assigner(MyTimestampAssigner())
# ds = ds.map(lambda x: eval(x))
ds1 = ds.assign_timestamps_and_watermarks(watermark_strategy) \
.key_by(lambda x: '/root', key_type=Types.STRING()) \
.window(TumblingProcessingTimeWindows.of(Time.seconds(1))) \
.apply(CountWindowFunction(), Types.TUPLE([Types.STRING(),
Types.INT()]))
ds1.print()
ds4 = ds1.key_by(lambda value: value[0]) \
.process(Storage())
ds4.print()
# ds1 = ds.map(mlfunc)
# ds1.print()
env.execute('write_to_kafka')
if __name__ == '__main__':
print("start writing data to kafka")
write_to_kafka()
Re: FW: FW: Issue Facing While Using EmbeddedRocksDbCheckpointing FlinkVersion(1.15.0)
Posted by Shuiqiang Chen <ac...@gmail.com>.
Hi,
From the task manager's log, We can find the following exception stack
trace, seems it was the operating system related problem with rocksDB.
2022-06-04 14:45:53,878 INFO
> org.apache.flink.runtime.executiongraph.ExecutionGraph [] - KEYED
> PROCESS, Map -> Sink: Print to Std. Out (1/1)
> (3a295a887361f4f87d2eaf79e901d056) switched from INITIALIZING to FAILED on
> 2f04093f-a18f-4c2c-b02e-6d1e6ece677e @ kubernetes.docker.internal
> (dataPort=-1).
> java.lang.Exception: Exception while creating StreamOperatorStateContext.
> at
> org.apache.flink.streaming.api.operators.StreamTaskStateInitializerImpl.streamOperatorStateContext(StreamTaskStateInitializerImpl.java:255)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.AbstractStreamOperator.initializeState(AbstractStreamOperator.java:268)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.runtime.tasks.RegularOperatorChain.initializeStateAndOpenOperators(RegularOperatorChain.java:109)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.runtime.tasks.StreamTask.restoreGates(StreamTask.java:711)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.runtime.tasks.StreamTaskActionExecutor$1.call(StreamTaskActionExecutor.java:55)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.runtime.tasks.StreamTask.restoreInternal(StreamTask.java:687)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.runtime.tasks.StreamTask.restore(StreamTask.java:654)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:958)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:927)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:766)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at org.apache.flink.runtime.taskmanager.Task.run(Task.java:575)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_202]
> Caused by: org.apache.flink.util.FlinkException: Could not restore keyed
> state backend for
> PythonKeyedProcessOperator_ce1331762e4644ef89dbdbc15321f049_(1/1) from any
> of the 1 provided restore options.
> at
> org.apache.flink.streaming.api.operators.BackendRestorerProcedure.createAndRestore(BackendRestorerProcedure.java:160)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.StreamTaskStateInitializerImpl.keyedStatedBackend(StreamTaskStateInitializerImpl.java:346)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.StreamTaskStateInitializerImpl.streamOperatorStateContext(StreamTaskStateInitializerImpl.java:164)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> ... 11 more
> Caused by: java.io.IOException: Could not load the native RocksDB library
> at
> org.apache.flink.contrib.streaming.state.EmbeddedRocksDBStateBackend.ensureRocksDBIsLoaded(EmbeddedRocksDBStateBackend.java:882)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.contrib.streaming.state.EmbeddedRocksDBStateBackend.createKeyedStateBackend(EmbeddedRocksDBStateBackend.java:402)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.contrib.streaming.state.EmbeddedRocksDBStateBackend.createKeyedStateBackend(EmbeddedRocksDBStateBackend.java:93)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.StreamTaskStateInitializerImpl.lambda$keyedStatedBackend$1(StreamTaskStateInitializerImpl.java:329)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.BackendRestorerProcedure.attemptCreateAndRestore(BackendRestorerProcedure.java:168)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.BackendRestorerProcedure.createAndRestore(BackendRestorerProcedure.java:135)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.StreamTaskStateInitializerImpl.keyedStatedBackend(StreamTaskStateInitializerImpl.java:346)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.StreamTaskStateInitializerImpl.streamOperatorStateContext(StreamTaskStateInitializerImpl.java:164)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> ... 11 more
> Caused by: java.lang.UnsatisfiedLinkError:
> C:\Users\Admin\AppData\Local\Temp\rocksdb-lib-cfe23cb49ce486a76d1126db2517e679\librocksdbjni-win64.dll:
> A dynamic link library (DLL) initialization routine failed
> at java.lang.ClassLoader$NativeLibrary.load(Native Method) ~[?:1.8.0_202]
> at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) ~[?:1.8.0_202]
> at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) ~[?:1.8.0_202]
> at java.lang.Runtime.load0(Runtime.java:809) ~[?:1.8.0_202]
> at java.lang.System.load(System.java:1086) ~[?:1.8.0_202]
> at
> org.rocksdb.NativeLibraryLoader.loadLibraryFromJar(NativeLibraryLoader.java:79)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.rocksdb.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:57)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.contrib.streaming.state.EmbeddedRocksDBStateBackend.ensureRocksDBIsLoaded(EmbeddedRocksDBStateBackend.java:856)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.contrib.streaming.state.EmbeddedRocksDBStateBackend.createKeyedStateBackend(EmbeddedRocksDBStateBackend.java:402)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.contrib.streaming.state.EmbeddedRocksDBStateBackend.createKeyedStateBackend(EmbeddedRocksDBStateBackend.java:93)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.StreamTaskStateInitializerImpl.lambda$keyedStatedBackend$1(StreamTaskStateInitializerImpl.java:329)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.BackendRestorerProcedure.attemptCreateAndRestore(BackendRestorerProcedure.java:168)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.BackendRestorerProcedure.createAndRestore(BackendRestorerProcedure.java:135)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.StreamTaskStateInitializerImpl.keyedStatedBackend(StreamTaskStateInitializerImpl.java:346)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> at
> org.apache.flink.streaming.api.operators.StreamTaskStateInitializerImpl.streamOperatorStateContext(StreamTaskStateInitializerImpl.java:164)
> ~[flink-dist_2.11-1.14.4.jar:1.14.4]
> ... 11 more
>
harshit.varshney@iktara.ai <Ha...@iktara.ai> 于2022年6月9日周四
15:06写道:
>
>
>
>
> *From:* Dian Fu [mailto:dian0511.fu@gmail.com]
> *Sent:* Monday, June 6, 2022 6:47 AM
> *To:* harshit.varshney@iktara.ai
> *Cc:* user
> *Subject:* Re: FW: Issue Facing While Using EmbeddedRocksDbCheckpointing
> FlinkVersion(1.15.0)
>
>
>
> None of the attachments are logs of the TaskManger. The TaskManger log
> should be located in the directory
> `E:\pythonProject16\lib\site-packages\pyflink\log`.
>
>
>
> On Fri, Jun 3, 2022 at 8:41 PM harshit.varshney@iktara.ai <
> Harshit.Varshney@iktara.ai> wrote:
>
>
>
>
>
> *From:* Shuiqiang Chen [mailto:acqua.csq@gmail.com]
> *Sent:* Friday, June 3, 2022 2:11 PM
> *To:* harshit.varshney@iktara.ai
> *Cc:* user
> *Subject:* Re: Issue Facing While Using EmbeddedRocksDbCheckpointing
> FlinkVersion(1.15.0)
>
>
>
> Hi,
>
>
>
> I guess that the traceback log you provided might not be the root cause of
> the failure, could you please provide the complete log of the Taskmanager?
>
>
>
> Best,
>
> Shuiqiang
>
>
>
> harshit.varshney@iktara.ai <Ha...@iktara.ai> 于2022年6月2日周四 22:04
> 写道:
>
> Dear Team,
>
>
>
> I am new to pyflink and request for your support in issue I am facing with
> Pyflink. I am using Pyflink version 1.15.0 & using reference code from
> pyflink reference code.
>
> The errors I am getting
>
> Traceback (most recent call last):
>
> File
> "E:\pythonProject16\lib\site-packages\apache_beam\runners\worker\data_plane.py",
> line 470, in input_elements
>
> element = received.get(timeout=1)
>
> File
> "C:\Users\Admin\AppData\Local\Programs\Python\Python38\lib\queue.py", line
> 178, in get
>
> raise Empty
>
> _queue.Empty
>
> RuntimeError: Channel closed prematurely.
>
> My code is:
>
> import json
>
> import os
>
> import time
>
> from datetime import datetime
>
>
>
> from pyflink.common import SimpleStringSchema,
> JsonRowDeserializationSchema, Types, JsonRowSerializationSchema
>
> from pyflink.datastream import StreamExecutionEnvironment, WindowFunction,
> HashMapStateBackend, CheckpointingMode, \
>
> FileSystemCheckpointStorage, KeyedProcessFunction, RuntimeContext,
> EmbeddedRocksDBStateBackend, RocksDBStateBackend, \
>
> ExternalizedCheckpointCleanup
>
> from pyflink.datastream.connectors import FlinkKafkaConsumer,
> FlinkKafkaProducer
>
> from pyflink.datastream.state import ValueStateDescriptor, StateTtlConfig,
> ListStateDescriptor
>
> from sklearn.preprocessing import LabelEncoder
>
> import pickle
>
> import pandas as pd
>
> from pyflink.common import Row
>
>
>
> import argparse
>
> from typing import Iterable
>
>
>
> from pyflink.datastream.connectors import FileSink, OutputFileConfig,
> RollingPolicy
>
>
>
> from pyflink.common import Types, WatermarkStrategy, Time, Encoder
>
> from pyflink.common.watermark_strategy import TimestampAssigner
>
> from pyflink.datastream import StreamExecutionEnvironment,
> ProcessWindowFunction
>
> from pyflink.datastream.window import TumblingEventTimeWindows,
> TimeWindow, TumblingProcessingTimeWindows
>
>
>
>
>
> class MyTimestampAssigner(TimestampAssigner):
>
> def extract_timestamp(self, value, record_timestamp) -> int:
>
> return int(value[0])
>
>
>
>
>
> class CountWindowFunction(WindowFunction[tuple, tuple, str, TimeWindow]):
>
> def apply(self, key: str, window: TimeWindow, inputs: Iterable[tuple]):
>
> # return [(key, result)]
>
> return [(key, len([e for e in inputs]))]
>
>
>
>
>
> class Storage(KeyedProcessFunction):
>
>
>
> def __init__(self):
>
> self.state = None
>
>
>
> def open(self, runtime_context: RuntimeContext):
>
> state_descriptor = ValueStateDescriptor("state", Types.FLOAT())
>
> state_ttl_config = StateTtlConfig \
>
> .new_builder(Time.days(7)) \
>
> .set_update_type(StateTtlConfig.UpdateType.OnReadAndWrite) \
>
> .disable_cleanup_in_background() \
>
> .build()
>
> state_descriptor.enable_time_to_live(state_ttl_config)
>
> self.state = runtime_context.get_state(state_descriptor)
>
>
>
> def process_element(self, value, ctx: 'KeyedProcessFunction.Context'):
>
> # retrieve the current count
>
> current = self.state.value()
>
> if current is None:
>
> current = 0
>
> current = value[1]
>
> self.state.update(current)
>
>
>
> yield current,time.time()
>
>
>
>
>
> def write_to_kafka():
>
> env = StreamExecutionEnvironment.get_execution_environment()
>
> env.set_parallelism(1)
>
> env.enable_checkpointing(10000)
>
> env.get_checkpoint_config().set_min_pause_between_checkpoints(5000)
>
>
> env.set_state_backend(EmbeddedRocksDBStateBackend(enable_incremental_checkpointing=True))
>
>
> env.get_checkpoint_config().set_checkpointing_mode(CheckpointingMode.EXACTLY_ONCE)
>
> env.get_checkpoint_config().enable_unaligned_checkpoints()
>
> env.get_checkpoint_config().set_max_concurrent_checkpoints(1)
>
> env.get_checkpoint_config().set_checkpoint_timeout(50000)
>
>
> env.get_checkpoint_config().enable_externalized_checkpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)
>
> check = os.path.join(os.path.abspath(os.path.dirname(__file__)),
>
> 'checkpoint-dir11')
>
>
> env.get_checkpoint_config().set_checkpoint_storage(FileSystemCheckpointStorage("
> file:///{}".format(check)))
>
> kafka_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
>
> 'flink-sql-connector-kafka_2.11-1.14.4.jar')
>
> env.add_jars("file:///{}".format(kafka_jar))
>
> rocksdb_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
>
> 'flink-statebackend-rocksdb_2.11-1.0.0.jar')
>
> env.add_jars("file:///{}".format(rocksdb_jar))
>
> # deserialization_schema = SimpleStringSchema()
>
> deserialization_schema = JsonRowDeserializationSchema.builder() \
>
> .type_info(type_info=Types.ROW_NAMED(["time_stamp",
>
> "Bill_number", "Store_Code",
> "itemdescription", "Item_code",
>
> "Gross_Price", "Discount",
> "Net_Price",
>
> "purchaseorReturn",
>
> "Membership_No",
> "Billing_Date", "Billing_Time"],
>
> [Types.DOUBLE(),
> Types.STRING(), Types.INT(), Types.STRING(),
>
> Types.STRING(),
> Types.FLOAT(), Types.FLOAT(), Types.FLOAT(),
>
> Types.STRING(),
> Types.STRING(), Types.STRING(),
>
> Types.STRING()])).build()
>
>
>
> kafka_consumer = FlinkKafkaConsumer(
>
> topics='test',
>
> deserialization_schema=deserialization_schema,
>
> properties={'bootstrap.servers': '192.168.1.37:9092', 'group.id':
> 'test_group1'})
>
>
>
> ds = env.add_source(kafka_consumer)
>
> # ds.print()
>
> watermark_strategy = WatermarkStrategy.for_monotonous_timestamps() \
>
> .with_timestamp_assigner(MyTimestampAssigner())
>
> # ds = ds.map(lambda x: eval(x))
>
>
>
> ds1 = ds.assign_timestamps_and_watermarks(watermark_strategy) \
>
> .key_by(lambda x: '/root', key_type=Types.STRING()) \
>
> .window(TumblingProcessingTimeWindows.of(Time.seconds(10))) \
>
> .apply(CountWindowFunction(), Types.TUPLE([Types.STRING(),
> Types.INT()]))
>
> ds1.print()
>
> ds4 = ds1.key_by(lambda value: value[0]) \
>
> .process(Storage())
>
> ds4.print()
>
> # ds1 = ds.map(mlfunc)
>
> # ds1.print()
>
>
>
> env.execute('write_to_kafka')
>
>
>
>
>
> if __name__ == '__main__':
>
> print("start writing data to kafka")
>
> write_to_kafka()
>
>
FW: FW: Issue Facing While Using EmbeddedRocksDbCheckpointing FlinkVersion(1.15.0)
Posted by "harshit.varshney@iktara.ai" <Ha...@iktara.ai>.
From: Dian Fu [mailto:dian0511.fu@gmail.com]
Sent: Monday, June 6, 2022 6:47 AM
To: harshit.varshney@iktara.ai
Cc: user
Subject: Re: FW: Issue Facing While Using EmbeddedRocksDbCheckpointing FlinkVersion(1.15.0)
None of the attachments are logs of the TaskManger. The TaskManger log should be located in the directory `E:\pythonProject16\lib\site-packages\pyflink\log`.
On Fri, Jun 3, 2022 at 8:41 PM harshit.varshney@iktara.ai <ma...@iktara.ai> <Harshit.Varshney@iktara.ai <ma...@iktara.ai> > wrote:
From: Shuiqiang Chen [mailto:acqua.csq@gmail.com <ma...@gmail.com> ]
Sent: Friday, June 3, 2022 2:11 PM
To: harshit.varshney@iktara.ai <ma...@iktara.ai>
Cc: user
Subject: Re: Issue Facing While Using EmbeddedRocksDbCheckpointing FlinkVersion(1.15.0)
Hi,
I guess that the traceback log you provided might not be the root cause of the failure, could you please provide the complete log of the Taskmanager?
Best,
Shuiqiang
harshit.varshney@iktara.ai <ma...@iktara.ai> <Harshit.Varshney@iktara.ai <ma...@iktara.ai> > 于2022年6月2日周四 22:04写道:
Dear Team,
I am new to pyflink and request for your support in issue I am facing with Pyflink. I am using Pyflink version 1.15.0 & using reference code from pyflink reference code.
The errors I am getting
Traceback (most recent call last):
File "E:\pythonProject16\lib\site-packages\apache_beam\runners\worker\data_plane.py", line 470, in input_elements
element = received.get(timeout=1)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38\lib\queue.py", line 178, in get
raise Empty
_queue.Empty
RuntimeError: Channel closed prematurely.
My code is:
import json
import os
import time
from datetime import datetime
from pyflink.common import SimpleStringSchema, JsonRowDeserializationSchema, Types, JsonRowSerializationSchema
from pyflink.datastream import StreamExecutionEnvironment, WindowFunction, HashMapStateBackend, CheckpointingMode, \
FileSystemCheckpointStorage, KeyedProcessFunction, RuntimeContext, EmbeddedRocksDBStateBackend, RocksDBStateBackend, \
ExternalizedCheckpointCleanup
from pyflink.datastream.connectors import FlinkKafkaConsumer, FlinkKafkaProducer
from pyflink.datastream.state import ValueStateDescriptor, StateTtlConfig, ListStateDescriptor
from sklearn.preprocessing import LabelEncoder
import pickle
import pandas as pd
from pyflink.common import Row
import argparse
from typing import Iterable
from pyflink.datastream.connectors import FileSink, OutputFileConfig, RollingPolicy
from pyflink.common import Types, WatermarkStrategy, Time, Encoder
from pyflink.common.watermark_strategy import TimestampAssigner
from pyflink.datastream import StreamExecutionEnvironment, ProcessWindowFunction
from pyflink.datastream.window import TumblingEventTimeWindows, TimeWindow, TumblingProcessingTimeWindows
class MyTimestampAssigner(TimestampAssigner):
def extract_timestamp(self, value, record_timestamp) -> int:
return int(value[0])
class CountWindowFunction(WindowFunction[tuple, tuple, str, TimeWindow]):
def apply(self, key: str, window: TimeWindow, inputs: Iterable[tuple]):
# return [(key, result)]
return [(key, len([e for e in inputs]))]
class Storage(KeyedProcessFunction):
def __init__(self):
self.state = None
def open(self, runtime_context: RuntimeContext):
state_descriptor = ValueStateDescriptor("state", Types.FLOAT())
state_ttl_config = StateTtlConfig \
.new_builder(Time.days(7)) \
.set_update_type(StateTtlConfig.UpdateType.OnReadAndWrite) \
.disable_cleanup_in_background() \
.build()
state_descriptor.enable_time_to_live(state_ttl_config)
self.state = runtime_context.get_state(state_descriptor)
def process_element(self, value, ctx: 'KeyedProcessFunction.Context'):
# retrieve the current count
current = self.state.value()
if current is None:
current = 0
current = value[1]
self.state.update(current)
yield current,time.time()
def write_to_kafka():
env = StreamExecutionEnvironment.get_execution_environment()
env.set_parallelism(1)
env.enable_checkpointing(10000)
env.get_checkpoint_config().set_min_pause_between_checkpoints(5000)
env.set_state_backend(EmbeddedRocksDBStateBackend(enable_incremental_checkpointing=True))
env.get_checkpoint_config().set_checkpointing_mode(CheckpointingMode.EXACTLY_ONCE)
env.get_checkpoint_config().enable_unaligned_checkpoints()
env.get_checkpoint_config().set_max_concurrent_checkpoints(1)
env.get_checkpoint_config().set_checkpoint_timeout(50000)
env.get_checkpoint_config().enable_externalized_checkpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)
check = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'checkpoint-dir11')
env.get_checkpoint_config().set_checkpoint_storage(FileSystemCheckpointStorage("file:///{} <file:///\\%7b%7d> ".format(check)))
kafka_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'flink-sql-connector-kafka_2.11-1.14.4.jar')
env.add_jars("file:///{} <file:///\\%7b%7d> ".format(kafka_jar))
rocksdb_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'flink-statebackend-rocksdb_2.11-1.0.0.jar')
env.add_jars("file:///{} <file:///\\%7b%7d> ".format(rocksdb_jar))
# deserialization_schema = SimpleStringSchema()
deserialization_schema = JsonRowDeserializationSchema.builder() \
.type_info(type_info=Types.ROW_NAMED(["time_stamp",
"Bill_number", "Store_Code", "itemdescription", "Item_code",
"Gross_Price", "Discount", "Net_Price",
"purchaseorReturn",
"Membership_No", "Billing_Date", "Billing_Time"],
[Types.DOUBLE(), Types.STRING(), Types.INT(), Types.STRING(),
Types.STRING(), Types.FLOAT(), Types.FLOAT(), Types.FLOAT(),
Types.STRING(), Types.STRING(), Types.STRING(),
Types.STRING()])).build()
kafka_consumer = FlinkKafkaConsumer(
topics='test',
deserialization_schema=deserialization_schema,
properties={'bootstrap.servers': '192.168.1.37:9092 <http://192.168.1.37:9092> ', 'group.id <http://group.id> ': 'test_group1'})
ds = env.add_source(kafka_consumer)
# ds.print()
watermark_strategy = WatermarkStrategy.for_monotonous_timestamps() \
.with_timestamp_assigner(MyTimestampAssigner())
# ds = ds.map(lambda x: eval(x))
ds1 = ds.assign_timestamps_and_watermarks(watermark_strategy) \
.key_by(lambda x: '/root', key_type=Types.STRING()) \
.window(TumblingProcessingTimeWindows.of(Time.seconds(10))) \
.apply(CountWindowFunction(), Types.TUPLE([Types.STRING(), Types.INT()]))
ds1.print()
ds4 = ds1.key_by(lambda value: value[0]) \
.process(Storage())
ds4.print()
# ds1 = ds.map(mlfunc)
# ds1.print()
env.execute('write_to_kafka')
if __name__ == '__main__':
print("start writing data to kafka")
write_to_kafka()
Re: FW: Issue Facing While Using EmbeddedRocksDbCheckpointing FlinkVersion(1.15.0)
Posted by Dian Fu <di...@gmail.com>.
None of the attachments are logs of the TaskManger. The TaskManger log
should be located in the directory
`E:\pythonProject16\lib\site-packages\pyflink\log`.
On Fri, Jun 3, 2022 at 8:41 PM harshit.varshney@iktara.ai <
Harshit.Varshney@iktara.ai> wrote:
>
>
>
>
> *From:* Shuiqiang Chen [mailto:acqua.csq@gmail.com]
> *Sent:* Friday, June 3, 2022 2:11 PM
> *To:* harshit.varshney@iktara.ai
> *Cc:* user
> *Subject:* Re: Issue Facing While Using EmbeddedRocksDbCheckpointing
> FlinkVersion(1.15.0)
>
>
>
> Hi,
>
>
>
> I guess that the traceback log you provided might not be the root cause of
> the failure, could you please provide the complete log of the Taskmanager?
>
>
>
> Best,
>
> Shuiqiang
>
>
>
> harshit.varshney@iktara.ai <Ha...@iktara.ai> 于2022年6月2日周四 22:04
> 写道:
>
> Dear Team,
>
>
>
> I am new to pyflink and request for your support in issue I am facing with
> Pyflink. I am using Pyflink version 1.15.0 & using reference code from
> pyflink reference code.
>
> The errors I am getting
>
> Traceback (most recent call last):
>
> File
> "E:\pythonProject16\lib\site-packages\apache_beam\runners\worker\data_plane.py",
> line 470, in input_elements
>
> element = received.get(timeout=1)
>
> File
> "C:\Users\Admin\AppData\Local\Programs\Python\Python38\lib\queue.py", line
> 178, in get
>
> raise Empty
>
> _queue.Empty
>
> RuntimeError: Channel closed prematurely.
>
> My code is:
>
> import json
>
> import os
>
> import time
>
> from datetime import datetime
>
>
>
> from pyflink.common import SimpleStringSchema,
> JsonRowDeserializationSchema, Types, JsonRowSerializationSchema
>
> from pyflink.datastream import StreamExecutionEnvironment, WindowFunction,
> HashMapStateBackend, CheckpointingMode, \
>
> FileSystemCheckpointStorage, KeyedProcessFunction, RuntimeContext,
> EmbeddedRocksDBStateBackend, RocksDBStateBackend, \
>
> ExternalizedCheckpointCleanup
>
> from pyflink.datastream.connectors import FlinkKafkaConsumer,
> FlinkKafkaProducer
>
> from pyflink.datastream.state import ValueStateDescriptor, StateTtlConfig,
> ListStateDescriptor
>
> from sklearn.preprocessing import LabelEncoder
>
> import pickle
>
> import pandas as pd
>
> from pyflink.common import Row
>
>
>
> import argparse
>
> from typing import Iterable
>
>
>
> from pyflink.datastream.connectors import FileSink, OutputFileConfig,
> RollingPolicy
>
>
>
> from pyflink.common import Types, WatermarkStrategy, Time, Encoder
>
> from pyflink.common.watermark_strategy import TimestampAssigner
>
> from pyflink.datastream import StreamExecutionEnvironment,
> ProcessWindowFunction
>
> from pyflink.datastream.window import TumblingEventTimeWindows,
> TimeWindow, TumblingProcessingTimeWindows
>
>
>
>
>
> class MyTimestampAssigner(TimestampAssigner):
>
> def extract_timestamp(self, value, record_timestamp) -> int:
>
> return int(value[0])
>
>
>
>
>
> class CountWindowFunction(WindowFunction[tuple, tuple, str, TimeWindow]):
>
> def apply(self, key: str, window: TimeWindow, inputs: Iterable[tuple]):
>
> # return [(key, result)]
>
> return [(key, len([e for e in inputs]))]
>
>
>
>
>
> class Storage(KeyedProcessFunction):
>
>
>
> def __init__(self):
>
> self.state = None
>
>
>
> def open(self, runtime_context: RuntimeContext):
>
> state_descriptor = ValueStateDescriptor("state", Types.FLOAT())
>
> state_ttl_config = StateTtlConfig \
>
> .new_builder(Time.days(7)) \
>
> .set_update_type(StateTtlConfig.UpdateType.OnReadAndWrite) \
>
> .disable_cleanup_in_background() \
>
> .build()
>
> state_descriptor.enable_time_to_live(state_ttl_config)
>
> self.state = runtime_context.get_state(state_descriptor)
>
>
>
> def process_element(self, value, ctx: 'KeyedProcessFunction.Context'):
>
> # retrieve the current count
>
> current = self.state.value()
>
> if current is None:
>
> current = 0
>
> current = value[1]
>
> self.state.update(current)
>
>
>
> yield current,time.time()
>
>
>
>
>
> def write_to_kafka():
>
> env = StreamExecutionEnvironment.get_execution_environment()
>
> env.set_parallelism(1)
>
> env.enable_checkpointing(10000)
>
> env.get_checkpoint_config().set_min_pause_between_checkpoints(5000)
>
>
> env.set_state_backend(EmbeddedRocksDBStateBackend(enable_incremental_checkpointing=True))
>
>
> env.get_checkpoint_config().set_checkpointing_mode(CheckpointingMode.EXACTLY_ONCE)
>
> env.get_checkpoint_config().enable_unaligned_checkpoints()
>
> env.get_checkpoint_config().set_max_concurrent_checkpoints(1)
>
> env.get_checkpoint_config().set_checkpoint_timeout(50000)
>
>
> env.get_checkpoint_config().enable_externalized_checkpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)
>
> check = os.path.join(os.path.abspath(os.path.dirname(__file__)),
>
> 'checkpoint-dir11')
>
>
> env.get_checkpoint_config().set_checkpoint_storage(FileSystemCheckpointStorage("file:///{}".format(check)))
>
> kafka_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
>
> 'flink-sql-connector-kafka_2.11-1.14.4.jar')
>
> env.add_jars("file:///{}".format(kafka_jar))
>
> rocksdb_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
>
> 'flink-statebackend-rocksdb_2.11-1.0.0.jar')
>
> env.add_jars("file:///{}".format(rocksdb_jar))
>
> # deserialization_schema = SimpleStringSchema()
>
> deserialization_schema = JsonRowDeserializationSchema.builder() \
>
> .type_info(type_info=Types.ROW_NAMED(["time_stamp",
>
> "Bill_number", "Store_Code",
> "itemdescription", "Item_code",
>
> "Gross_Price", "Discount",
> "Net_Price",
>
> "purchaseorReturn",
>
> "Membership_No",
> "Billing_Date", "Billing_Time"],
>
> [Types.DOUBLE(),
> Types.STRING(), Types.INT(), Types.STRING(),
>
> Types.STRING(),
> Types.FLOAT(), Types.FLOAT(), Types.FLOAT(),
>
> Types.STRING(),
> Types.STRING(), Types.STRING(),
>
> Types.STRING()])).build()
>
>
>
> kafka_consumer = FlinkKafkaConsumer(
>
> topics='test',
>
> deserialization_schema=deserialization_schema,
>
> properties={'bootstrap.servers': '192.168.1.37:9092', 'group.id':
> 'test_group1'})
>
>
>
> ds = env.add_source(kafka_consumer)
>
> # ds.print()
>
> watermark_strategy = WatermarkStrategy.for_monotonous_timestamps() \
>
> .with_timestamp_assigner(MyTimestampAssigner())
>
> # ds = ds.map(lambda x: eval(x))
>
>
>
> ds1 = ds.assign_timestamps_and_watermarks(watermark_strategy) \
>
> .key_by(lambda x: '/root', key_type=Types.STRING()) \
>
> .window(TumblingProcessingTimeWindows.of(Time.seconds(10))) \
>
> .apply(CountWindowFunction(), Types.TUPLE([Types.STRING(),
> Types.INT()]))
>
> ds1.print()
>
> ds4 = ds1.key_by(lambda value: value[0]) \
>
> .process(Storage())
>
> ds4.print()
>
> # ds1 = ds.map(mlfunc)
>
> # ds1.print()
>
>
>
> env.execute('write_to_kafka')
>
>
>
>
>
> if __name__ == '__main__':
>
> print("start writing data to kafka")
>
> write_to_kafka()
>
>
FW: Issue Facing While Using EmbeddedRocksDbCheckpointing FlinkVersion(1.15.0)
Posted by "harshit.varshney@iktara.ai" <Ha...@iktara.ai>.
From: Shuiqiang Chen [mailto:acqua.csq@gmail.com]
Sent: Friday, June 3, 2022 2:11 PM
To: harshit.varshney@iktara.ai
Cc: user
Subject: Re: Issue Facing While Using EmbeddedRocksDbCheckpointing FlinkVersion(1.15.0)
Hi,
I guess that the traceback log you provided might not be the root cause of the failure, could you please provide the complete log of the Taskmanager?
Best,
Shuiqiang
harshit.varshney@iktara.ai <ma...@iktara.ai> <Harshit.Varshney@iktara.ai <ma...@iktara.ai> > 于2022年6月2日周四 22:04写道:
Dear Team,
I am new to pyflink and request for your support in issue I am facing with Pyflink. I am using Pyflink version 1.15.0 & using reference code from pyflink reference code.
The errors I am getting
Traceback (most recent call last):
File "E:\pythonProject16\lib\site-packages\apache_beam\runners\worker\data_plane.py", line 470, in input_elements
element = received.get(timeout=1)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38\lib\queue.py", line 178, in get
raise Empty
_queue.Empty
RuntimeError: Channel closed prematurely.
My code is:
import json
import os
import time
from datetime import datetime
from pyflink.common import SimpleStringSchema, JsonRowDeserializationSchema, Types, JsonRowSerializationSchema
from pyflink.datastream import StreamExecutionEnvironment, WindowFunction, HashMapStateBackend, CheckpointingMode, \
FileSystemCheckpointStorage, KeyedProcessFunction, RuntimeContext, EmbeddedRocksDBStateBackend, RocksDBStateBackend, \
ExternalizedCheckpointCleanup
from pyflink.datastream.connectors import FlinkKafkaConsumer, FlinkKafkaProducer
from pyflink.datastream.state import ValueStateDescriptor, StateTtlConfig, ListStateDescriptor
from sklearn.preprocessing import LabelEncoder
import pickle
import pandas as pd
from pyflink.common import Row
import argparse
from typing import Iterable
from pyflink.datastream.connectors import FileSink, OutputFileConfig, RollingPolicy
from pyflink.common import Types, WatermarkStrategy, Time, Encoder
from pyflink.common.watermark_strategy import TimestampAssigner
from pyflink.datastream import StreamExecutionEnvironment, ProcessWindowFunction
from pyflink.datastream.window import TumblingEventTimeWindows, TimeWindow, TumblingProcessingTimeWindows
class MyTimestampAssigner(TimestampAssigner):
def extract_timestamp(self, value, record_timestamp) -> int:
return int(value[0])
class CountWindowFunction(WindowFunction[tuple, tuple, str, TimeWindow]):
def apply(self, key: str, window: TimeWindow, inputs: Iterable[tuple]):
# return [(key, result)]
return [(key, len([e for e in inputs]))]
class Storage(KeyedProcessFunction):
def __init__(self):
self.state = None
def open(self, runtime_context: RuntimeContext):
state_descriptor = ValueStateDescriptor("state", Types.FLOAT())
state_ttl_config = StateTtlConfig \
.new_builder(Time.days(7)) \
.set_update_type(StateTtlConfig.UpdateType.OnReadAndWrite) \
.disable_cleanup_in_background() \
.build()
state_descriptor.enable_time_to_live(state_ttl_config)
self.state = runtime_context.get_state(state_descriptor)
def process_element(self, value, ctx: 'KeyedProcessFunction.Context'):
# retrieve the current count
current = self.state.value()
if current is None:
current = 0
current = value[1]
self.state.update(current)
yield current,time.time()
def write_to_kafka():
env = StreamExecutionEnvironment.get_execution_environment()
env.set_parallelism(1)
env.enable_checkpointing(10000)
env.get_checkpoint_config().set_min_pause_between_checkpoints(5000)
env.set_state_backend(EmbeddedRocksDBStateBackend(enable_incremental_checkpointing=True))
env.get_checkpoint_config().set_checkpointing_mode(CheckpointingMode.EXACTLY_ONCE)
env.get_checkpoint_config().enable_unaligned_checkpoints()
env.get_checkpoint_config().set_max_concurrent_checkpoints(1)
env.get_checkpoint_config().set_checkpoint_timeout(50000)
env.get_checkpoint_config().enable_externalized_checkpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)
check = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'checkpoint-dir11')
env.get_checkpoint_config().set_checkpoint_storage(FileSystemCheckpointStorage("file:///{}".format(check)))
kafka_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'flink-sql-connector-kafka_2.11-1.14.4.jar')
env.add_jars("file:///{}".format(kafka_jar))
rocksdb_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'flink-statebackend-rocksdb_2.11-1.0.0.jar')
env.add_jars("file:///{}".format(rocksdb_jar))
# deserialization_schema = SimpleStringSchema()
deserialization_schema = JsonRowDeserializationSchema.builder() \
.type_info(type_info=Types.ROW_NAMED(["time_stamp",
"Bill_number", "Store_Code", "itemdescription", "Item_code",
"Gross_Price", "Discount", "Net_Price",
"purchaseorReturn",
"Membership_No", "Billing_Date", "Billing_Time"],
[Types.DOUBLE(), Types.STRING(), Types.INT(), Types.STRING(),
Types.STRING(), Types.FLOAT(), Types.FLOAT(), Types.FLOAT(),
Types.STRING(), Types.STRING(), Types.STRING(),
Types.STRING()])).build()
kafka_consumer = FlinkKafkaConsumer(
topics='test',
deserialization_schema=deserialization_schema,
properties={'bootstrap.servers': '192.168.1.37:9092', 'group.id': 'test_group1'})
ds = env.add_source(kafka_consumer)
# ds.print()
watermark_strategy = WatermarkStrategy.for_monotonous_timestamps() \
.with_timestamp_assigner(MyTimestampAssigner())
# ds = ds.map(lambda x: eval(x))
ds1 = ds.assign_timestamps_and_watermarks(watermark_strategy) \
.key_by(lambda x: '/root', key_type=Types.STRING()) \
.window(TumblingProcessingTimeWindows.of(Time.seconds(10))) \
.apply(CountWindowFunction(), Types.TUPLE([Types.STRING(), Types.INT()]))
ds1.print()
ds4 = ds1.key_by(lambda value: value[0]) \
.process(Storage())
ds4.print()
# ds1 = ds.map(mlfunc)
# ds1.print()
env.execute('write_to_kafka')
if __name__ == '__main__':
print("start writing data to kafka")
write_to_kafka()
Re: Issue Facing While Using EmbeddedRocksDbCheckpointing FlinkVersion(1.15.0)
Posted by Shuiqiang Chen <ac...@gmail.com>.
Hi,
I guess that the traceback log you provided might not be the root cause of
the failure, could you please provide the complete log of the Taskmanager?
Best,
Shuiqiang
harshit.varshney@iktara.ai <Ha...@iktara.ai> 于2022年6月2日周四
22:04写道:
> Dear Team,
>
>
>
> I am new to pyflink and request for your support in issue I am facing with
> Pyflink. I am using Pyflink version 1.15.0 & using reference code from
> pyflink reference code.
>
> The errors I am getting
>
> Traceback (most recent call last):
>
> File
> "E:\pythonProject16\lib\site-packages\apache_beam\runners\worker\data_plane.py",
> line 470, in input_elements
>
> element = received.get(timeout=1)
>
> File
> "C:\Users\Admin\AppData\Local\Programs\Python\Python38\lib\queue.py", line
> 178, in get
>
> raise Empty
>
> _queue.Empty
>
> RuntimeError: Channel closed prematurely.
>
> My code is:
>
> import json
>
> import os
>
> import time
>
> from datetime import datetime
>
>
>
> from pyflink.common import SimpleStringSchema,
> JsonRowDeserializationSchema, Types, JsonRowSerializationSchema
>
> from pyflink.datastream import StreamExecutionEnvironment, WindowFunction,
> HashMapStateBackend, CheckpointingMode, \
>
> FileSystemCheckpointStorage, KeyedProcessFunction, RuntimeContext,
> EmbeddedRocksDBStateBackend, RocksDBStateBackend
>
> from pyflink.datastream.connectors import FlinkKafkaConsumer,
> FlinkKafkaProducer
>
> from pyflink.datastream.state import ValueStateDescriptor, StateTtlConfig,
> ListStateDescriptor
>
> from sklearn.preprocessing import LabelEncoder
>
> import pickle
>
> import pandas as pd
>
> from pyflink.common import Row
>
>
>
> import argparse
>
> from typing import Iterable
>
>
>
> from pyflink.datastream.connectors import FileSink, OutputFileConfig,
> RollingPolicy
>
>
>
> from pyflink.common import Types, WatermarkStrategy, Time, Encoder
>
> from pyflink.common.watermark_strategy import TimestampAssigner
>
> from pyflink.datastream import StreamExecutionEnvironment,
> ProcessWindowFunction
>
> from pyflink.datastream.window import TumblingEventTimeWindows,
> TimeWindow, TumblingProcessingTimeWindows
>
>
>
>
>
> class MyTimestampAssigner(TimestampAssigner):
>
> def extract_timestamp(self, value, record_timestamp) -> int:
>
> return int(value[0])
>
>
>
>
>
> class CountWindowFunction(WindowFunction[tuple, tuple, str, TimeWindow]):
>
> def apply(self, key: str, window: TimeWindow, inputs: Iterable[tuple]):
>
> # return [(key, result)]
>
> return [(key, len([e for e in inputs]))]
>
>
>
>
>
> class Storage(KeyedProcessFunction):
>
>
>
> def __init__(self):
>
> self.state = None
>
>
>
> def open(self, runtime_context: RuntimeContext):
>
> state_descriptor = ValueStateDescriptor("state", Types.FLOAT())
>
> state_ttl_config = StateTtlConfig \
>
> .new_builder(Time.days(7)) \
>
> .set_update_type(StateTtlConfig.UpdateType.OnReadAndWrite) \
>
> .disable_cleanup_in_background() \
>
> .build()
>
> state_descriptor.enable_time_to_live(state_ttl_config)
>
> self.state = runtime_context.get_state(state_descriptor)
>
>
>
> def process_element(self, value, ctx: 'KeyedProcessFunction.Context'):
>
> # retrieve the current count
>
> current = self.state.value()
>
> if current is None:
>
> current = 0
>
> current = value[1]
>
> self.state.update(current)
>
>
>
> yield current,time.time()
>
>
>
>
>
> def write_to_kafka():
>
> env = StreamExecutionEnvironment.get_execution_environment()
>
> env.set_parallelism(1)
>
> env.enable_checkpointing(1000)
>
> env.get_checkpoint_config().set_min_pause_between_checkpoints(5000)
>
> env.set_state_backend(EmbeddedRocksDBStateBackend())
>
>
> env.get_checkpoint_config().set_checkpointing_mode(CheckpointingMode.AT_LEAST_ONCE)
>
> #env.get_checkpoint_config().enable_unaligned_checkpoints()
>
> check = os.path.join(os.path.abspath(os.path.dirname(__file__)),
>
> 'checkpoint-dir11')
>
>
> env.get_checkpoint_config().set_checkpoint_storage(FileSystemCheckpointStorage("file:///{}".format(check)))
>
> kafka_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
>
> 'flink-sql-connector-kafka_2.11-1.14.4.jar')
>
> env.add_jars("file:///{}".format(kafka_jar))
>
> rocksdb_jar = os.path.join(os.path.abspath(os.path.dirname(__file__)),
>
> 'flink-statebackend-rocksdb_2.11-1.0.0.jar')
>
> env.add_jars("file:///{}".format(rocksdb_jar))
>
> # deserialization_schema = SimpleStringSchema()
>
> deserialization_schema = JsonRowDeserializationSchema.builder() \
>
> .type_info(type_info=Types.ROW_NAMED(["time_stamp",
>
> "Bill_number", "Store_Code",
> "itemdescription", "Item_code",
>
> "Gross_Price", "Discount",
> "Net_Price",
>
> "purchaseorReturn",
>
> "Membership_No",
> "Billing_Date", "Billing_Time"],
>
> [Types.DOUBLE(),
> Types.STRING(), Types.INT(), Types.STRING(),
>
> Types.STRING(),
> Types.FLOAT(), Types.FLOAT(), Types.FLOAT(),
>
> Types.STRING(),
> Types.STRING(), Types.STRING(),
>
> Types.STRING()])).build()
>
>
>
> kafka_consumer = FlinkKafkaConsumer(
>
> topics='test',
>
> deserialization_schema=deserialization_schema,
>
> properties={'bootstrap.servers': '192.168.1.37:9092', 'group.id':
> 'test_group1'})
>
>
>
> ds = env.add_source(kafka_consumer)
>
> # ds.print()
>
> watermark_strategy = WatermarkStrategy.for_monotonous_timestamps() \
>
> .with_timestamp_assigner(MyTimestampAssigner())
>
> # ds = ds.map(lambda x: eval(x))
>
>
>
> ds1 = ds.assign_timestamps_and_watermarks(watermark_strategy) \
>
> .key_by(lambda x: '/root', key_type=Types.STRING()) \
>
> .window(TumblingProcessingTimeWindows.of(Time.seconds(1))) \
>
> .apply(CountWindowFunction(), Types.TUPLE([Types.STRING(),
> Types.INT()]))
>
> ds1.print()
>
> ds4 = ds1.key_by(lambda value: value[0]) \
>
> .process(Storage())
>
> ds4.print()
>
> # ds1 = ds.map(mlfunc)
>
> # ds1.print()
>
>
>
> env.execute('write_to_kafka')
>
>
>
>
>
> if __name__ == '__main__':
>
> print("start writing data to kafka")
>
> write_to_kafka()
>
>
>
>
>