> On Jun 1, 2022, at 5:27 AM, Neeraj Vaidya <neeraj.vai...@yahoo.co.in.INVALID> 
> wrote:
> 
> Thanks John !
> It seems if I send a TERM signal to my KStreams application which is running 
> inside a Docker container, then it results in a Clean shutdown.
> This also then creates a checkpoint file successfully.
> So, I guess I need to figure out how to send a TERM signal to my running Java 
> KStreams application inside the Docker container.
> The KStreams application is actually launched by an entrypoint.sh script in 
> the Docker container. If I send a signal to this container using "docker 
> kill", this signal does not get passed to the java application which is 
> spawned by the entrypoint.sh script.

Launching directly from a shell script in a container doesn't work very well - 
you need a proper init substitute for your container to handle
signal management and subprocess zombie reaping.

We use dumb-init:
https://github.com/Yelp/dumb-init

dumb-init calls into our launcher script, which then `exec`s the java process.


> 
> Regards,
> Neeraj
>     On Wednesday, 1 June, 2022, 04:38:16 pm GMT+10, John Roesler 
> <vvcep...@apache.org> wrote:  
> 
> Hi Neeraj,
> 
> Thanks for all that detail! Your expectation is correct. You should see the 
> checkpoint files after a _clean_ shutdown, and then you should not see it 
> bootstrap from the beginning of the changelog on the next startup.
> 
> How are you shutting down the application? You'll want to call 
> KafkaStreams#stop and wait for it to complete before stopping the java 
> process.
> 
> I hope this helps,
> -John
> 
> On Tue, May 31, 2022, at 23:09, Neeraj Vaidya wrote:
>> Hi All,
>> I have a KStreams application running inside a Docker container which 
>> uses a persistent key-value store. 
>> 
>> I have configured state.dir with a value of /tmp/kafka-streams (which 
>> is the default).
>> 
>> When I start this container using "docker run", I mount 
>> /tmp/kafka-streams to a directory on my host machine which is, say for 
>> example, /mnt/storage/kafka-streams.
>> 
>> My application.id is "myapp". I have 288 partitions in my input topic 
>> which means my state store / changelog topic will also have that many 
>> partitions. Accordingly, when start my Docker container, I see that 
>> there a folder with the number of the partition such as 0_1, 
>> 0_2....0_288 under /mnt/storage/kafka-streams/myapp/
>> 
>> When I shutdown my application, I do not see any checkpoint file in any 
>> of the partition directories.
>> 
>> And when I restart my application, it starts fetching the records from 
>> the changelog topic rather than reading from local disk. I suspect this 
>> is because there is no .checkpoint file in any of the partition 
>> directories. 
>> 
>> This is what I see in the startup log. It seems to be bootstrapping the 
>> entire state store from the changelog topic i.e. performing network I/O 
>> rather than reading from what is on disk :
>> 
>> "
>> 2022-05-31T12:08:02.791 
>> [mtx-caf-f6900c0a-50ca-43a0-8a4b-95eaad9e5093-StreamThread-122] WARN  
>> o.a.k.s.p.i.ProcessorStateManager - MSG=stream-thread 
>> [myapp-f6900c0a-50ca-43a0-8a4b-95eaa
>> d9e5093-StreamThread-122] task [0_170] State store MyAppRecordStore did 
>> not find checkpoint offsets while stores are not empty, since under EOS 
>> it has the risk of getting uncommitte
>> d data in stores we have to treat it as a task corruption error and 
>> wipe out the local state of task 0_170 before re-bootstrapping
>> 2022-05-31T12:08:02.791 
>> [myapp-f6900c0a-50ca-43a0-8a4b-95eaad9e5093-StreamThread-122] WARN  
>> o.a.k.s.p.internals.StreamThread - MSG=stream-thread 
>> [mtx-caf-f6900c0a-50ca-43a0-8a4b-95eaad
>> 9e5093-StreamThread-122] Detected the states of tasks [0_170] are 
>> corrupted. Will close the task as dirty and re-create and bootstrap 
>> from scratch.
>> org.apache.kafka.streams.errors.TaskCorruptedException: Tasks [0_170] 
>> are corrupted and hence needs to be re-initialized
>>         at 
>> org.apache.kafka.streams.processor.internals.ProcessorStateManager.initializeStoreOffsetsFromCheckpoint(ProcessorStateManager.java:254)
>>         at 
>> org.apache.kafka.streams.processor.internals.StateManagerUtil.registerStateStores(StateManagerUtil.java:109)
>>         at 
>> org.apache.kafka.streams.processor.internals.StreamTask.initializeIfNeeded(StreamTask.java:216)
>>         at 
>> org.apache.kafka.streams.processor.internals.TaskManager.tryToCompleteRestoration(TaskManager.java:433)
>>         at 
>> org.apache.kafka.streams.processor.internals.StreamThread.initializeAndRestorePhase(StreamThread.java:849)
>>         at 
>> org.apache.kafka.streams.processor.internals.StreamThread.runOnce(StreamThread.java:731)
>>         at 
>> org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:583)
>>         at 
>> org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:556)
>> "
>> 
>> 1) Should I expect to see a checkpoint file in each of the partition 
>> directories under /mnt/storage/kafka-streams/myapp/ when I shutdown my 
>> application ?
>> 
>> 2) Is this an issue because I am running my KStreams app inside a 
>> docker container ? If there were permissions issues, then I would have 
>> expected to see issues in creating the other files such as .lock or 
>> rocksdb folder (and it's contents).
>> 
>> My runtime environment is Docker 1.13.1 on RHEL 7.

Reply via email to